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

( delay ( random-list a b )))))<br />

Da mesma forma que listas, é possível definir árvores e outras estruturas infinitas<br />

usando avaliação preguiçosa.<br />

9.3 streams<br />

Há situações em que listas e vetores não são adequados para a representação de sequências<br />

de dados muito grandes ou infinitas. Streams são semelhantes a listas, mas da mesma<br />

forma que a lista de números aleatóreos na seção anterior, os elementos de uma stream<br />

somente são <strong>com</strong>putados quando necessários.<br />

A partir de poucas primitivas é possível implementar streams que se <strong>com</strong>portam <strong>com</strong>o<br />

“listas preguiçosas”. Uma stream será definida a seguir <strong>com</strong>o um par (assim <strong>com</strong>o uma<br />

lista) – mas embora o lado esquerdo do par seja tratado da mesma forma que o car de<br />

uma lista, o lado direito será construído sempre usando delay:<br />

( define-syntax stream-cons<br />

( syntax-rules ()<br />

((_ a b)<br />

( cons a ( delay b )))))<br />

( define stream-car car )<br />

( define stream-cdr<br />

( lambda (s)<br />

( force ( cdr s ))))<br />

Versão Preliminar<br />

O símbolo empty-stream (ou qualquer outro objeto que não possa ser resultado de<br />

stream-cons) pode ser usado para representar a stream vazia; um predicado stream-null<br />

testa se a stream é igual a empty-stream:<br />

( define stream-null <br />

( lambda (s)<br />

( eqv s ’ empty-stream )))<br />

Os procedimentos para listas desenvolvidos no capítulo 5 não funcionarão <strong>com</strong><br />

streams naquela forma, mas é simples desenvolver variantes que funcionem <strong>com</strong> streams.<br />

Os exemplos a seguir mostram a implementação de filter e map para streams.<br />

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

221

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

Saved successfully!

Ooh no, something went wrong!