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

Jerônimo C. Pellegrini<br />

( let (( G11 1)<br />

( G12 3))<br />

( let G13 ((i G11 ))<br />

(if (< i G12 )<br />

( begin ( display start )<br />

( newline )<br />

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

Neste código, if não é mais forma especial, e sim uma variável cujo valor é o símbolo<br />

x. Isto significa que (if ...) passa a ser uma aplicação de procedimento. Interpretadores<br />

<strong>Scheme</strong> podem seguir dois caminhos aqui:<br />

• Avaliar a variável if, verificar que não é procedimento e sinalizar um erro, ou<br />

• Avaliar os parâmetros do que considera ser uma chamada de procedimento. Neste<br />

caso, tentará avaliar a forma (begin ...), que chama loop recursivamente – e o<br />

programa entrará em um laço infinito.<br />

7.2.2 Mais sobre macros não-higiênicas<br />

É <strong>com</strong>um o nome de “não-higiênico” a sistemas de macro que permitem captura de<br />

símbolos da mesma forma que define-macro.<br />

Há dois livros somente sobre técnicas de uso deste tipo de macro (de baixo nível e<br />

não higiênica): o de Paul Graham [35] e o de Doug Hoyte [21]. A linguagem usada em<br />

ambos os livros é Common Lisp, cujo sistema de macros funciona da mesma forma que<br />

define-macro, e o conteúdo dos livros (em particular o de Paul Graham) é aplicável a<br />

programas <strong>Scheme</strong> usando define-macro, <strong>com</strong> pequenas modificações.<br />

Versão Preliminar<br />

7.3 r 5 rs e syntax-rules<br />

A solução dada pelo padrão R 5 RS de <strong>Scheme</strong> para o problema da captura de variáveis é<br />

uma linguagem específica para a escrita de macros. Para as macros desenvolvidas nesta<br />

linguagem há a garantia de que todos os símbolos usados na macro terão a conotação<br />

esperada para a situação <strong>com</strong>um: os símbolos usados no corpo da macro são renomeados<br />

automaticamente, da mesma forma que se faz <strong>com</strong> gensym.<br />

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

169

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

Saved successfully!

Ooh no, something went wrong!