Resposta ao exercício 76

(defmacro itera-lista (var-e-lista &rest exprs)
  (let ((var-lista (gensym)))
    `(let ((,var-lista ,(cadr var-e-lista))
           (,(car var-e-lista) nil))
       (loop
         (unless ,var-lista (return nil))
         (setq ,(car var-e-lista) (car ,var-lista)
               ,var-lista (cdr ,var-lista))
         ,@exprs))))

> (let ((lista '(1 2 3))) (itera-lista (x '(4 5 6)) (print (cons x lista)))) (4 1 2 3) (5 1 2 3) (6 1 2 3) NIL

Esta forma especial já existe em Lisp e denomina-se dolist.