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

... (Argument 1) INTEGER expected<br />

(odd 2.5)<br />

13.3.1.2 Casamento de Padrões<br />

Verificar o tipo de cada mensagem que chega em um nó pode ser trabalhoso demais,<br />

dependendo da variedade de mensagens que o nó pode receber.<br />

A macro recv implementa casamento de padrões para mensagens. O seguinte exemplo<br />

é usado no artigo que descreve o Termite:<br />

( define better-pong-server<br />

( spawn<br />

( recv<br />

( lambda ()<br />

( let loop ()<br />

( recv<br />

(( from ’ping ) ; pattern to match<br />

( where ( pid from )) ; constraint<br />

(! from ’pong ))) ; action<br />

( loop )))))<br />

A forma geral de recv é<br />

( padrao<br />

( where restricao )<br />

acao )<br />

( padrao<br />

( where restricao )<br />

acao )<br />

...)<br />

No exemplo better-pong-server, o padrão é (from ’ping) – o que significa que<br />

Versão Preliminar<br />

uma mensagem só será tratada ali se tiver a forma de uma lista, onde o segundo elemento<br />

é o símbolo ping. A variável from será instanciada <strong>com</strong> o valor do primeiro elemento da<br />

lista. A restrição descrita no exemplo determina que a variável from seja o pid de alguma<br />

thread. A reação para esta mensagem é enviar para from o símbolo pong.<br />

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

301

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

Saved successfully!

Ooh no, something went wrong!