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

( lambda ( valor tolerancia )<br />

( let (( proximo (+ 1 (/ 1 valor ))))<br />

( let (( erro ( abs (- proximo valor ))))<br />

(if (>= erro tolerancia )<br />

( calcula-phi proximo tolerancia )<br />

proximo )))))<br />

O procedimento calcula-phi é recursivo na cauda, e portanto pode ser chamado<br />

recursivamente quantas vezes forem necessárias sem que o consumo de memória aumente.<br />

1.6.3 Processo recursivo em árvore<br />

1.6.3.1 Exemplo: torres de Hanói<br />

1.6.3.2 Exemplo: multiplicação de inteiros<br />

1.6.4 named let<br />

Há situações em que não é conveniente definir um procedimento visível em todo o<br />

programa. É possível criar laços locais da mesma forma que variáveis temporárias. Quando<br />

o primeiro argumento da forma let é uma lista, ela associa valores a variáveis. Quando o<br />

primeiro argumento é um símbolo e o segundo é uma lista, um laço é criado.<br />

Para determinar o valor da maior carta de um jogador no jogo de poquer é necessário<br />

percorrer a lista de cartas lembrando-se do maior valor já visto; podemos usar named let<br />

para isto:<br />

( define maior-carta<br />

( lambda ( hand )<br />

( let repete (( cartas hand ) ( maior 0))<br />

(if ( null ( cartas ))<br />

maior<br />

( let (( valor ( carta- > valor ( pega-nome ( car hand )))))<br />

(if (> valor maior )<br />

Versão Preliminar<br />

( repete ( cdr cartas ) valor )<br />

( repete ( cdr cartas ) maior )))))))<br />

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