Resposta ao exercício 77

(defmacro itera-lista (var-e-lista &rest exprs)
  (let ((itera (gensym)) (lista (gensym)))
    `(labels ((,itera (,lista)
                (if (null ,lista)
                  nil
                  (let ((,(car var-e-lista) (car ,lista)))
                    ,@exprs
                    (,itera (cdr ,lista))))))
       (,itera ,(cadr var-e-lista)))))

Note-se que a definição da macro implicou a utilização de símbolos únicos (via gensym) quer para o nome de um parâmetro quer para o nome de uma função local.