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

(( call-with-current-continuation<br />

( lambda (k)<br />

( letrec (( um<br />

( lambda ()<br />

( display "Um")<br />

( newline )<br />

(k dois )))<br />

( tres<br />

( lambda ()<br />

( display " Tres ")<br />

( newline )<br />

(k fim )))<br />

( dois<br />

( lambda ()<br />

um ))))<br />

( fim<br />

( display " Dois ")<br />

( newline )<br />

(k tres )))<br />

( lambda ()<br />

( display " Fim !")<br />

( newline )<br />

#f )))<br />

Este programa mostra claramente a relação entre continuações em programas funcionais<br />

e GOTO em programas imperativos (basta trocar o identificador “k” por “goto”<br />

e reler o programa). Embora haja, <strong>com</strong>o o exemplo mostra, claras similaridades entre<br />

continuações e o <strong>com</strong>ando GOTO, há também diferenças importantes: continuações trocam<br />

de estado em um programa, mudando o contexto corrente e se lembrando de algum<br />

contexto que faz sentido. O GOTO muda o fluxo de controle arbitrariamente entre posições<br />

no fonte do programa, podendo inclusive levar o programa a estados inconsistentes ou que<br />

não fazem sentido.<br />

Ainda que os problemas <strong>com</strong> continuações sejam menos graves que aqueles relacionados<br />

ao GOTO, elas devem, assim <strong>com</strong>o este, ter seu uso controlado e assim <strong>com</strong>o<br />

Versão Preliminar<br />

macros, devem ser usadas apenas quando funções não forem suficientes e isoladas em<br />

poucas partes de um programa. Após a verificação que um determinado padrão de uso de<br />

continuações se repete e poderia ser abstraído, primitivas são elaboradas usando call/cc<br />

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