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 - Jerônimo C. Pellegrini<br />

1.6 repetições<br />

Os procedimentos que discutimos até este momento não realizam processos que se<br />

repetem: todos executam uma determinada tarefa uma única vez e param. Para definir<br />

processos que se repetem, usamos recursão: um procedimento realiza diversas tarefas e,<br />

em seguida, chama a si mesmo novamente.<br />

(este exemplo será substituído por outro melhor – e um que não use display/newline!)<br />

( define countdown<br />

( lambda (n)<br />

( cond (( zero n)<br />

( display "It ’s BREAK TIME !!! ")<br />

( newline ))<br />

( else<br />

( display n)<br />

( newline )<br />

( countdown (- n 1))))))<br />

O procedimento acima conta de n até 1, e depois mostra uma mensagem:<br />

(countdown 5)<br />

5<br />

4<br />

3<br />

2<br />

1<br />

It’s BREAK TIME!!!<br />

Ao ser chamado, countdown verifica se seu argumento é zero, e se for o caso mostra a<br />

mensagem. Se o argumento não for zero, ele é mostrado ao usuário e o procedimento<br />

chama a si mesmo, porque após mostrar n ao usuário, só falta contar de n − 1 a zero e<br />

mostrar a mensagem – o que pode ser feito por (countdown (- n 1)). A “chamada a si<br />

mesmo” feita pelo procedimento tem o nome de “chamada recursiva”.<br />

Uma implemetação de jogo de poquer em <strong>Scheme</strong> poderia representar cartas <strong>com</strong>o<br />

Versão Preliminar<br />

listas, onde o primeiro elemento da lista é a face da carta (um número ou um símbolo<br />

dentre j, q, k e a) e o segundo elemento é seu naipe (um símbolo dentre paus, espadas,<br />

copas, ouros). A lista (6 ouros) representaria um seis de ouros, por exemplo.<br />

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

21

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

Saved successfully!

Ooh no, something went wrong!