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

De fato, o casador de padrões percorre cada padrão, do primeiro ao último, e para de<br />

percorrê-los quando encontra um que case <strong>com</strong> os argumentos da macro. Neste caso, os<br />

argumentos casam <strong>com</strong> o primeiro padrão:<br />

x<br />

→ i<br />

in<br />

→ from<br />

lista → 10<br />

do<br />

→ to<br />

body ... → 15 do ( display i) ( newline )<br />

O problema parece ser simples: a macro não sabe que certos identificadores deveriam<br />

ser usados para diferenciar um padrão de outro. Para informarmos a macro disto basta<br />

incluirmos a lista de literais <strong>com</strong>o primeiro argumento para syntax-rules:<br />

( define-syntax for<br />

( syntax-rules (in do from to) ;; x end ))<br />

body ...))))<br />

Com esta modificação a macro já não aceita mais qualquer identificador nas posições<br />

de in, do, from e to:<br />

(for x blah ’(a b c) blah (display x) (newline))<br />

Error: during expansion of (for ...) - no rule matches form: (for x blah<br />

(quote (a b c)) blah (display x) (newline))<br />

Além disso, passa a funcionar para os dois casos:<br />

Versão Preliminar<br />

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

173

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

Saved successfully!

Ooh no, something went wrong!