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 | +-----------------------------------------------------------------------------+