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 (n) (- n 1)))<br />

( define straight-2 <br />

( lambda ( valores )<br />

( let (( tam (- ( length valores ) 1)))<br />

( let (( valores-1 ( take valores tam ))<br />

( valores-2 ( cdr valores )))<br />

( equal valores-1 ( map sub1 valores-2 ))))))<br />

A lista valores-1 é igual à lista valores, sem o último elemento. A lista valores-2 é<br />

igual ao cdr da lista valores. Basta emparelhar ambas e verificá-las paralelamente e em<br />

ordem para verificar se é uma sequência:<br />

cartas: 8 9 10 j q<br />

valores-1: 8 9 10 11<br />

valores-2: 9 10 11 12<br />

Em cada posição, o valor do elemento de valores-2 é igual ao valor do respectivo<br />

elemento de valores somado de um.<br />

Esta abordagem é mais limpa e elegante que a anterior, mas é menos eficiente: a lista<br />

é percorrida uma vez na avaliação da forma (take valores tam) e outra na avaliação de<br />

(equal valores1 (map ...)). No entanto, <strong>com</strong>o as listas usadas para representar mãos<br />

de jogo de poquer são muito pequenas, esta diferença em eficiência não será notada na<br />

prática.<br />

O procedimento que verifica um royal flush é bastante simples porque usa os outros já<br />

desenvolvidos:<br />

( define royal <br />

( lambda ( valores naipes )<br />

( and (= ( car valores ) 10)<br />

( straight valores )<br />

( flush naipes ))))<br />

É possível codificar várias listas relacionadas em uma só, de maneira que a lista<br />

Versão Preliminar<br />

resultante tenha elementos de cada uma das listas originais alternando-se.<br />

( zip ’(" Julius " " Winston " " Napoleao ")<br />

’( cesar primeiro-ministro imperador )<br />

’( roma inglaterra franca ))<br />

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

131

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

Saved successfully!

Ooh no, something went wrong!