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

Por exemplo, a expressão (* (+ 10 (* 5 20)) 0.5) é normalmente avaliada na<br />

seguinte ordem:<br />

(* (+ 10 (* 5 20)) 0.5) =<br />

(* (+ 10 100) 0.5) =<br />

(* 110 0.5) =<br />

55<br />

Supondo a existência de um procedimento escape que transforma outros procedimentos<br />

em procedimentos de escape, a expressão (* ((escape +) 10 (* 5 20)) 0.5) = é<br />

avaliada de outra forma:<br />

(* ((escape +) 10 (* 5 20)) 0.5) =<br />

(* ((escape +) 10 100) 0.5) =<br />

(+ 10 100) = ← aqui está o “escape”<br />

110<br />

O procedimento (escape +) eliminou a <strong>com</strong>putação que esperava para acontecer (o<br />

(* · · · )).<br />

8.1.3 Continuações<br />

O procedimento <strong>Scheme</strong> call-with-current-continuation (normalmente abreviado<br />

<strong>com</strong>o call/cc) é usado da seguinte forma:<br />

( call /cc<br />

( lambda (k)<br />

...<br />

(k ...)))<br />

O único argumento de call/cc é uma função de um argumento (chamada de recebedor).<br />

call/cc fará o seguinte:<br />

• Determinará o contexto atual (é importante lembrar-se de que o contexto é um<br />

procedimento);<br />

Versão Preliminar<br />

• Chamará o procedimento escape no contexto atual, gerando um procedimento de<br />

escape (chamado de continuação);<br />

• A variável k, no contexto do recebedor, será a continuação.<br />

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