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

(( depois x)<br />

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

( value #f))<br />

( lambda ()<br />

( cond (( not done )<br />

( set ! value x)<br />

( set ! done #t )))<br />

value )))))<br />

Esta implementação é bastante simplista, porque a macro depois gera um procedimento<br />

que não é distinguível de outros procedimentos:<br />

(define x (depois (* 10 20)))<br />

x<br />

#<br />

(x)<br />

200<br />

Desta forma o procedimento agora não seria necessário. No entanto, é importante que<br />

promessas sejam tratadas <strong>com</strong>o um tipo especial de procedimento e que o procedimento<br />

force existe para manter a clareza conceitual do código. Implementações de <strong>Scheme</strong><br />

normalmente definem promessas <strong>com</strong>o uma estrutura especial, e não <strong>com</strong>o procedimento<br />

<strong>com</strong>um:<br />

(define b (delay (* 10 20)))<br />

b<br />

#<br />

(b)<br />

Error: call of non-procedure: #<br />

Versão Preliminar<br />

9.2 estruturas infinitas<br />

A implementação de listas em <strong>Scheme</strong> envolve três predicados, cons, car e cdr. Se todo o<br />

tratamento da cauda da lista passar a ser feito de forma preguiçosa, pode-se definir listas<br />

infinitas.<br />

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

219

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

Saved successfully!

Ooh no, something went wrong!