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

( error " trying to dequeue from empty queue ")<br />

( let (( res ( car queue )))<br />

( set-car ! q ( cdr queue ))<br />

(if ( null ( car q))<br />

( set-cdr ! q ’()))<br />

res )))))<br />

Como nossa fila é implementada <strong>com</strong>o uma lista, o procedimento para verificar se a<br />

fila é vazia é trivial:<br />

( define empty-q <br />

( lambda (q)<br />

( null ( car q ))))<br />

Pode ser interessante termos procedimentos para encontrar ou remover um elemento<br />

do meio da fila.<br />

O procedimento find-in-queue funciona de maneira semelhante ao procedimento<br />

member, e retorna a sublista que inicia <strong>com</strong> o primeiro elemento para o qual pred retorna<br />

#t.<br />

( define find-in-queue<br />

( lambda (q pred )<br />

( define find<br />

( lambda ( queue pred )<br />

( cond (( null queue )<br />

#f)<br />

(( pred ( car queue ))<br />

queue )<br />

( else<br />

( find ( cdr queue ) pred )))))<br />

( find ( car q) pred )))<br />

Versão Preliminar<br />

Quando o elemento não for encontrado o valor #f será retornado; quando for encontrado<br />

teremos uma sublista. Assim podemos usar este procedimento também <strong>com</strong> listas<br />

que incluem valores booleanos:<br />

( define q ( make-q ))<br />

( begin<br />

( enqueue ! 1 q)<br />

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