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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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

( define-syntax nome-da-macro<br />

)<br />

Uma macro tem um nome e seu corpo contém um transformador de sintaxe (syntax<br />

transformer). Uma maneira de construir um transformador de sintaxe é usando a macro<br />

syntax-rules:<br />

( define-syntax <br />

( syntax-rules (< palavras-chave >)<br />

((< padrao_1 >) )<br />

...<br />

((< padrao_n >) )))<br />

Durante a fase de expansão de macros, quando uma forma for encontrada iniciando<br />

<strong>com</strong> o nome de uma macro, o interpretador tentará casar a forma <strong>com</strong> um dos padrões<br />

listados. O primeiro padrão a casar será expandido de acordo <strong>com</strong> seu template.<br />

Não há em <strong>Scheme</strong> uma forma especial que repita a execução de um trecho de<br />

programa um número determinado de vezes. Uma macro poderia fazê-lo:<br />

O código que deverá ser gerado a partir de “(vezes n body ...)” é:<br />

( let loop ((i 0))<br />

(if (< i n)<br />

( begin<br />

#f))<br />

body ...<br />

( loop (+ 1 i )))<br />

A macro definida a seguir gera este código:<br />

( define-syntax vezes<br />

( syntax-rules ()<br />

(( vezes n body ...) ;;

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

Saved successfully!

Ooh no, something went wrong!