(defmacro nested-dolist ((&rest bindings) &body body) (if (null bindings) `(progn ,@body) (destructuring-bind (binding . rest) bindings `(dolist ,binding (nested-dolist ,rest ,@body))))) (nested-dolist ((i '(0 1 2 3 4)) (j '(a b c d e)) (k '(:foo :bar :baz))) (print (list i j k))) (DOLIST (I '(0 1 2 3 4)) (DOLIST (J '(A B C D E)) (DOLIST (K '(:FOO :BAR :BAZ)) (PROGN (PRINT (LIST I J K))))))