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

inc-val<br />

get-val<br />

faz-contador<br />

(lambda ()<br />

(lambda ()<br />

(let ((valor 0)) valor)<br />

(list (lambda ()<br />

valor)<br />

(lambda ()<br />

(set! valor (+ valor 1)))<br />

(lambda ()<br />

(set! valor (- valor 1))))))<br />

(lambda ()<br />

(set! valor<br />

(+ valor 1)))<br />

Outra chamada a faz-contador retorna um novo contador:<br />

( define-values (g i d)<br />

(g)<br />

0<br />

(i)<br />

(i)<br />

( faz-contador ))<br />

(get-val) ;; para ver que é diferente do anterior<br />

-1<br />

(g)<br />

2<br />

3.6.1 Memoização<br />

3.6.2 Um novo gerador de números aleatóreos<br />

valor 0<br />

Versão Preliminar<br />

O gerador de números aleatóreos que desenvolvemos na Seção 1.3.4 é ligeiramente inconveniente:<br />

para usá-lo, temos que manter em uma variável o valor do último número<br />

aleatóreo gerado e repassá-lo ao gerador cada vez que precisarmos de um novo número.<br />

Podemos nos livrar deste problema construindo o gerador <strong>com</strong>o um fecho. O procedi-<br />

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