Seguinte: Depuração de Macros Acima: Macros Anterior: Avaliação de Macros
Índice remissivo

Escrita de Macros

A escrita de uma macro é inerentemente mais complexa que a escrita de uma função, sendo decomposta em quatro fases:

  1. 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.
  2. 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.
  3. 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.
  4. 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