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 />

(or a (f b))<br />

expansão<br />

de macros<br />

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

(if tmp1<br />

tmp1<br />

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

(if tmp2<br />

tmp2<br />

#f))))<br />

interpretador<br />

Figura 7.2: O processo de expansão de macros – um exemplo concreto.<br />

As transformações feitas durante a expansão de macros podem ser arbitrariamente<br />

<strong>com</strong>plexas, e são feitas usando linguagens de programação (isso contrasta <strong>com</strong> a expansão<br />

de macros em C, onde só o que se pode fazer é substituir variáveis em templates).<br />

Há vários diferentes sistemas de macro para <strong>Scheme</strong>; este capítulo aborda primeiro<br />

um sistema mais antigo e que não chegou a ser padronizado, chamado defmacro ou<br />

define-macro, e depois disso o sistema padrão do R 5 RS e alguns outros. Embora o padrão<br />

R 5 RS defina apenas a mini-linguagem syntax-rules para construção de transformadores<br />

de sintaxe, a grande maioria das implementações de <strong>Scheme</strong> oferece também algum outro<br />

mecanismo. É mais natural que uma discussão sobre macros e higiene inicie <strong>com</strong> macros<br />

não higiênicas, para que fique claro o problema que as macros higiênicas tentam resolver.<br />

Este Capítulo inicia <strong>com</strong> uma breve discussão da forma especial quasiquote, usada<br />

na construção de listas e especialmente útil em macros. Depois há a descrição de três<br />

sistemas de macros: o não-higiênico define-macro, o sistema higiênico syntax-rules e o<br />

sistema <strong>com</strong> renomeação explícita, onde a higiene é controlada.<br />

Versão Preliminar<br />

160<br />

[ 27 de outubro de 2010 at 15:47 ]

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

Saved successfully!

Ooh no, something went wrong!