(defmacro foo (symlist start-vals end-vals &body body) (if symlist `(loop for ,(car symlist) from ,(car start-vals) below ,(car end-vals) do (foo ,(cdr symlist) ,(cdr start-vals) ,(cdr end-vals) ,@body)) `(progn ,@body)))