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

( syntax-rules ()<br />

(( vezes condicao body ...)<br />

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

(if (< i n)<br />

( begin<br />

body ...<br />

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

#f ))))))<br />

( vezes n<br />

( write-char #\-))<br />

( newline ))))<br />

O exemplo a seguir encontra-se no padrão R 5 RS:<br />

( letrec-syntax<br />

(( my-or ( syntax-rules ()<br />

(( my-or ) #f)<br />

(( my-or e) e)<br />

(( my-or e1 e2 ...)<br />

( let (( temp e1 ))<br />

(if<br />

temp<br />

temp<br />

( my-or e2 ...)))))))<br />

( let ((x #f)<br />

(y 7)<br />

( temp 8)<br />

( let odd )<br />

( my-or x<br />

(if even ))<br />

Versão Preliminar<br />

( let temp )<br />

(if y)<br />

y )))<br />

A macro definida <strong>com</strong> letrec-syntax é definida recursivamente, e passará por várias<br />

expansões até que o código gerado não tenha mais macros a serem expandidas.<br />

A lista de variáveis no let do último exemplo pode parecer um pouco estranha. Os<br />

identificadores let e if são redefinidos – e <strong>Scheme</strong> permite fazê-lo!<br />

( let (( let odd ))<br />

178<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!