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

Algumas horas depois, ele sente que precisa de mais cafeína (e desta vez não<br />

tem um centavo sequer!) O haker deixa novamente no monitor um adesivo<br />

<strong>com</strong> a tarefa que iria fazer em seguida e vai até a porta. Ele pega a foto que<br />

havia deixado na caixa e aplica <strong>com</strong>o se fosse um procedimento <strong>Scheme</strong>, e...<br />

No instante seguinte o hacker está novamente <strong>com</strong> seu copo de café na mão!<br />

Ele toma novamente o café e segue para seu <strong>com</strong>putador. Chegando lá, ele<br />

passa novamente a fazer o que estava indicado no adesivo no monitor – e que<br />

desta vez é diferente do adesivo amarelo usado na primeira vez que foi tomar<br />

café.<br />

O hacker continua programando e usando as “fotos” (continuações) até finalmente<br />

terminar a versão 20.9342-2 do editor de textos, que traz cinco novas<br />

features e quarenta e sete novos bugs que não existiam na versão 20.9342-1.<br />

Esta pequena história deve ajudar o leitor a <strong>com</strong>preender o conceito de continuação,<br />

que é semelhante à “foto” obtida pelo protagonista. Para conseguir a continuação, o personagem<br />

precisou usar um procedimento <strong>Scheme</strong> cujo nome é call-with-current-continuation,<br />

muitas vezes abreviado call/cc.<br />

Descreveremos continuações usando dois outros conceitos: o de contexto de uma<br />

subexpressão e o de procedimento de escape.<br />

8.1.1 Contextos<br />

Em uma S-expressão S, o contexto de uma subexpressão s é obtido da seguinte maneira:<br />

é:<br />

• Troca-se s por □;<br />

• Construímos um procedimento que aceite □ <strong>com</strong>o parâmetro e cujo corpo seja<br />

exatamente a expressão obtida no passo anterior.<br />

Por exemplo, na expressão (* 2 (log (+ x y))), o contexto da subexpressão (+ x y)<br />

• Primeiro passo: (* 2 (log □))<br />

Versão Preliminar<br />

• Segundo passo: (lambda (□) (* 2 (log □))<br />

Ou seja, o contexto da subexpressão (+ x y) é um procedimento que tomaria seu<br />

resultado e continuaria a <strong>com</strong>putação.<br />

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