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

Figura 13.1: Pilha implementada <strong>com</strong> atores.<br />

A Figura 13.1 mostra dois atores usados para implementar uma pilha. Cada ator<br />

contém um elemento e um link prox para o próximo. Desta forma a pilha se parecerá<br />

<strong>com</strong> uma lista ligada – mas ela será ligada por endereços postais de atores, e não por<br />

ponteiros;<br />

def: no-pilha (conteudo, link)<br />

mensagens:<br />

POP: (cliente)<br />

PUSH: (novo-conteudo)<br />

<strong>com</strong>andos:<br />

casos para msg<br />

POP:<br />

se conteudo ≠ nulo então<br />

be<strong>com</strong>e link<br />

send conteudo to cliente<br />

PUSH:<br />

seja P = new no-pilha (conteudo, link)<br />

be<strong>com</strong>e new no-pilha (novo-conteudo, P)<br />

Para criar um novo ator <strong>com</strong> <strong>com</strong>portamento no-pilha é necessário instanciar o<br />

<strong>com</strong>portamento <strong>com</strong> new, passando a ele valores para as variáveis conteudo e link.<br />

As mensagens aceitas por atores <strong>com</strong> <strong>com</strong>portamento no-pilha são POP e PUSH.<br />

Quando uma mensagem POP for recebida, ela deverá trazer um valor, que será vinculado<br />

Versão Preliminar<br />

à variável cliente. Quando a mensagem for PUSH, o valor que vier <strong>com</strong> a mensagem será<br />

vinculado à variável novo-conteudo. Antes de verificar a descrição dos <strong>com</strong>andos já é<br />

possível intuir o que ambas mensagens fazem: POP removerá o ator que representa o topo<br />

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