Path: utzoo!attcan!uunet!seismo!esosun!jackson
From: jackson@esosun.UUCP (Jerry Jackson)
Newsgroups: comp.lang.lisp
Subject: Re: DOLIST as DO
Message-ID: <228@esosun.UUCP>
Date: 15 Jul 88 15:22:26 GMT
References: <327@soi.UUCP>
Organization: SAIC, San Diego
Lines: 48
In-reply-to: alex@soi.UUCP's message of 14 Jul 88 15:09:55 GMT


In article <327@soi.UUCP> alex@soi.UUCP (Alex Zatsman) writes:

   Path: esosun!seismo!uunet!yale!husc6!soi!alex
   From: alex@soi.UUCP (Alex Zatsman)
   Newsgroups: comp.lang.lisp
   Keywords: dolist do do*
   Date: 14 Jul 88 15:09:55 GMT
   Organization: Software Options Inc.,  Cambridge,  Mass.
   Lines: 2

   Anybody knows an elegant way of representing DOLIST construct
   through DO ?  How about DO* ?



How about...


(defmacro dolist ((var list &optional result-form) &rest body)
  (let ((listvar (gensym)))
    `(do* ((,listvar ,list (cdr ,listvar))
	  (,var (car ,list) (car ,listvar)))
	 ((null ,listvar) ,result-form)
	 ,@body)))


or...


(defmacro dolist ((var list &optional result-form) &rest body)
  (let ((listvar (gensym)))
    `(do ((,listvar (cdr ,list) (cdr ,listvar))
	  (,var (car ,list) (car ,listvar)))
	 ()
	 ,@body
	 (when (null ,listvar)
	   (return ,result-form)))))



+-----------------------------------------------------------------------------+
|   Jerry Jackson                       UUCP:  seismo!esosun!jackson          |
|   Geophysics Division, MS/22          ARPA:  esosun!jackson@seismo.css.gov  |
|   SAIC                                SOUND: (619)458-4924                  |
|   10210 Campus Point Drive                                                  |
|   San Diego, CA  92121                                                      |
+-----------------------------------------------------------------------------+