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

(force nome-<strong>com</strong>pleto)<br />

Error: unbound variable: nome<br />

Podemos tentar criar um ambiente léxico onde nome e sobrenome existam e forçar<br />

nome-<strong>com</strong>pleto neste ambiente, mas isto também resultará em erro:<br />

(let ((nome "Richard") (sobrenome "Wagner")) (force nome-<strong>com</strong>pleto))<br />

Error: unbound variable: nome<br />

O ambiente de nome-<strong>com</strong>pleto é o ambiente léxico onde a definimos. Como nome-<strong>com</strong>pleto<br />

foi definida no ambiente global, podemos criar os vínculos faltantes ali.<br />

(define nome "Richard")<br />

(define sobrenome "Wagner")<br />

(force nome-<strong>com</strong>pleto)<br />

”Richard Wagner”<br />

9.1.1 Como implementar delay e force<br />

A implementação de delay e force é surpreendentemente simples. Aqui os definiremos<br />

<strong>com</strong> os nomes depois e agora:<br />

( define-syntax depois<br />

( syntax-rules ()<br />

(( depois x)<br />

( lambda () x ))))<br />

( define agora<br />

( lambda (x) (x )))<br />

A macro depois aceita uma S-expressão e devolve um procedimento que, ao ser<br />

executado, avalia a S-expressão. Este procedimento retornado por depois é a “promessa”.<br />

O procedimento agora toma a promessa (o procedimento) e o executa, produzindo o<br />

Versão Preliminar<br />

valor desejado.<br />

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

217

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

Saved successfully!

Ooh no, something went wrong!