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

Jerônimo C. Pellegrini<br />

A elipse (“...”) usada na definição da macro casa <strong>com</strong> a cauda de uma lista.<br />

As variáveis usadas dentro de syntax-rules não tem qualquer relação <strong>com</strong> as variáveis<br />

do programa <strong>Scheme</strong>. A macro acima usa uma variável “i” dentro do syntax-rules,<br />

mas o código gerado não contém uma variável “i”:<br />

(vezes 3 (display i)(newline))<br />

Error: unbound variable: i<br />

(let ((i 2)) (vezes 3 (display i) (newline)))<br />

2<br />

2<br />

2<br />

#t<br />

7.3.1 Palavras-chave<br />

A macro vezes define a expansão para formas que <strong>com</strong>eçam <strong>com</strong> o identificador vezes,<br />

<strong>com</strong>o se ele fosse um procedimento. Em algumas situações pode ser necessário incluir<br />

palavras-chave em outras posições da S-expressão. Um exemplo simples é a implementação<br />

de uma macro for.<br />

( FOR x IN lista DO body )<br />

( FOR x FROM 1 TO n DO body )<br />

Uma primeira tentativa de construir a macro for é:<br />

( define-syntax for<br />

( syntax-rules ()<br />

Versão Preliminar<br />

(( for x in lista do body ...)<br />

;; template para percorrer lista:<br />

( let loop ((l lista ))<br />

(if ( not ( null l))<br />

( let ((x ( car l )))<br />

body ...<br />

( loop ( cdr l )))<br />

#f )))<br />

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

171

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

Saved successfully!

Ooh no, something went wrong!