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

Jerônimo C. Pellegrini<br />

O procedimento maior-carta é recursivo na cauda, embora para verificar a maior de<br />

cinco cartas isto seja de pouca importância.<br />

A forma geral do named let é<br />

( let nome ( ( var1 val1 )<br />

( var2 val2 )<br />

... )<br />

...<br />

( nome prox-val1 prox-val2 ...))<br />

Para obter um número aleatóreo entre 0 e k, calculamos o número m = k/(2 3 2) e<br />

geramos números até conseguir um r menor que m; então podemos usar r/m.<br />

( define next-integer-random<br />

( lambda (x n)<br />

( let ((m (/ ( expt 2 32 n ))))<br />

( let again ((r ( next-random x )))<br />

(if (> r m)<br />

( again ((r ( next-random r ))))<br />

( floor (/ r m )))))))<br />

(Falta consertar algo aqui: precisamos do r para passar ao gerador na próxima<br />

chamada)<br />

1.6.5 letrec<br />

A forma especial letrec funciona da mesma maneira que a forma let, exceto que as<br />

definições dentro de um letrec podem fazer referência ao nome sendo defnido.<br />

Versão Preliminar<br />

O código a seguir é uma primeira tentativa de criar um procedimento list-ref, que<br />

retorna o n-ésimo elemento de uma lista.<br />

( define list-ref-1<br />

( lambda ( lst n)<br />

( cond (( not ( and ( list lst )<br />

( integer n )))<br />

( error " list-ref : need a list and an iteger "))<br />

(( negative n)<br />

( error "n < 0"))<br />

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

29

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

Saved successfully!

Ooh no, something went wrong!