(defmacro dolist (spec #!rest body) "(dolist (var '(items) return) (forms))" `(progn (mapc (lambda(,(car spec)) ,@body) ,(cadr spec)) ,(caddr spec))) (dolist (x '(a b c d e)) (princ x)) ;; alternative (defmacro dolist (spec #!rest body) `(mapc (lambda (,(car spec)) ,@body) ,(cadr spec))) (print (macroexpand-1 '(dolist (x '(1 2 3)) (print x)))) (dolist (x '(a b c)) (print x)) (dolist (font '((identifier-face "green") (comment-face "gray"))) (print (car font)) (print (cadr font)))