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

( define seed-random !<br />

( lambda (s)<br />

( set ! aleat s )))<br />

( define next-random !<br />

( lambda ()<br />

( let (( aleat-novo ( linear-congruencial aleat<br />

( set ! aleat aleat-novo )<br />

elat-novo )))<br />

1103515245<br />

12345<br />

( expt 2 32))))<br />

Infelizmente, esta solução depende da criação de uma variável aleat no ambiente<br />

global para armazenar o valor do último número gerado.<br />

Se armazenarmos este código em um arquivo random.scm, um programador poderá<br />

mais tarde carregá-lo e usar nosso código. Se ele tiver uma variável aleat em seu programa,<br />

ela será modificada cada vez que um número aleatóreo for gerado (possivelmente<br />

dando ao programador algumas horas de dor de cabeça).<br />

Além deste problema poderíamos encontrar outro: se usarmos nosso gerador em um<br />

programa <strong>com</strong> mais de uma thread, elas poderão tentar usar o gerador ao mesmo tempo,<br />

podendo deixá-lo em estado inconsistente, ou gerando o mesmo número para todas. Uma<br />

implementação melhor do gerador de números aleatóreos será apresentada na Seção 3.6.<br />

O ambiente global é útil, no entanto, quando testamos pequenos trechos de programas<br />

<strong>Scheme</strong>. No resto deste texto restringiremos nosso uso de variáveis globais a pequenos<br />

exemplos e testes.<br />

3.3 listas<br />

Além de lugares denotados diretamente por nomes, podemos também modificar valores<br />

dentro de estruturas.<br />

Versão Preliminar<br />

Os procedimentos set-car! e set-cdr! modificam o car e o cdr de um par.<br />

(define x (cons ’one ’two))<br />

x<br />

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

89

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

Saved successfully!

Ooh no, something went wrong!