Seguinte: Caracteres de Macro Acima: Macros Anterior: Escrita de Macros
Índice remissivo

Depuração de Macros

Uma vez que a aplicação de uma macro mostra apenas o resultado final, depois de a macro ter sido expandida e a sua expansão avaliada, é necessário um meio auxiliar para visualizarmos se a expansão está a ser feita de modo correcto. Para isso o Lisp fornece as funções macroexpand-1 e macroexpand que realizam a expansão da macro uma única vez ou todas as vezes possíveis, respectivamente.

> (macroexpand-1 '(meu-if (> 3 4) (+ 2 3) (- 5 3)))
(COND ((> 3 4) (+ 2 3)) (T (- 5 3))) 

Exercício 68

Implemente a macro quando, que recebe um teste e um conjunto de expressões. Esta forma especial avalia o teste e, quando este é verdade, avalia sequencialmente as expressões, devolvendo o valor da última. Se o teste é falso, a forma retorna nil sem avaliar mais nada.

Resposta



Copyright António Leitão, 1995