08.02.2015 Views

Programação Funcional e Concorrente com Scheme

Programação Funcional e Concorrente com Scheme

Programação Funcional e Concorrente com Scheme

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

notas de aula - Jerônimo C. Pellegrini<br />

7 M AC R O S<br />

Macros são regras para transformar programas antes que eles sejam interpretados ou<br />

<strong>com</strong>pilados. Estas transformações se dão em pequenos trechos e código.<br />

fonte<br />

expansão<br />

de macros<br />

fonte<br />

expandido<br />

interpretador<br />

Figura 7.1: O processo de expansão de macros.<br />

A Figura 7.1 mostra um diagrama do processo de expansão de macros. Formas<br />

especiais são macros pré-definidas na implementação <strong>Scheme</strong>. Por exemplo a forma<br />

especial or é transformada em uma série de ifs encadeados. A forma (or a (f b)) é<br />

expandida para<br />

( let (( tmp1 a))<br />

(if<br />

tmp1<br />

tmp1<br />

( let (( tmp2 (f b )))<br />

(if<br />

tmp2<br />

tmp2<br />

#f ))))<br />

Versão Preliminar<br />

Esta expansão avalia os argumentos do or no máximo uma vez, da esquerda para<br />

a direita, e deixa de avaliar quando um dos argumentos for diferente de #f – isso é<br />

exatamente o que determina o padrão de <strong>Scheme</strong>. A Figura 7.2 ilustra este exemplo de<br />

expansão de macro.<br />

[ 27 de outubro de 2010 at 15:47 ]<br />

159

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!