Seguinte: Depuração de Macros
Acima: Macros
Anterior: Avaliação de Macros
Índice remissivo
A escrita de uma macro é inerentemente mais
complexa que a escrita de uma função, sendo decomposta
em quatro fases:
- Decidir se a macro é realmente necessária.
Esta fase é de grande importância, pois cada vez que
se define uma macro está-se a aumentar a linguagem com uma
nova forma especial. Quem pretende ler um programa que usa a
macro é obrigado a conhecer a sua sintaxe e semântica,
e se o número de macros é muito grande, pode ser difícil
perceber o código.
- Escrever a sintaxe da macro. Nesta fase
pretende-se definir qual vai ser a forma de utilização
da macro. A sintaxe deve ser o mais simples possível e o
mais coerente possível com as restantes formas da linguagem
para não complicar a sua leitura.
- Escrever a expansão da macro. Nesta fase determina-se
a expressão Lisp que a macro deve produzir quando expandida.
A expansão é qualquer expressão Lisp, que pode inclusivé
fazer referência a outras macros.
- Escrever a macro usando a forma especial defmacro. É
esta a fase mais delicada do processo, em que se programa um
processo de transformar a forma especial que queremos definir
numa expressão que use outras formas especiais já definidas.
A título de exemplo vamos definir a forma
especial meu-if cujo objectivo é simplificar o uso do cond
quando só existe um teste, um consequente e uma alternativa.
A sintaxe da forma meu-if é:
(meu-if teste consequente alternativa)
A expansão da macro será qualquer coisa
da forma:
(cond (teste consequente)
(t alternativa))
A definição da macro é:
(defmacro meu-if (teste consequente alternativa)
(list 'cond
(list teste consequente)
(list t alternativa)))
Copyright António Leitão, 1995