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

5 L I S TA S E S E Q U E N C I A S<br />

Este Capítulo trata principalmente de procedimentos que operam em sequências (listas,<br />

strings e vetores), retornando novas sequências.<br />

5.1 listas<br />

Os procedimentos list-map e list-reduce, descritos no Capítulo 1, são os exemplos<br />

mais simples de procedimentos para listas.<br />

Para verificar se uma mão de poquer tem todas as cartas de um mesmo naipe será útil<br />

o procedimento unary-every, que aceita um predicado e uma lista, e retorna #t quando<br />

o predicado retornar #t para todos os elementos da lista:<br />

(unary-every positive ’(0 1 2))<br />

#f<br />

(unary-every symbol ’(a b c))<br />

#t<br />

A implementação de unary-every é bastante simples:<br />

( define unary-every<br />

( lambda ( pred l)<br />

( let ev (( lista l))<br />

(or ( not ( pair lista ))<br />

( and ( pred ( car lista ))<br />

(ev ( cdr lista )))))))<br />

Versão Preliminar<br />

O procedimento flush construido usando unary-every é bastante simples:<br />

( define flush <br />

( lambda ( naipes )<br />

( unary-every ( lambda (x)<br />

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

129

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

Saved successfully!

Ooh no, something went wrong!