(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.