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

Jerônimo C. Pellegrini<br />

( set ! resultado-final ( begin f1 ...))<br />

#t )))) ;; não houve throw, retorne true<br />

(if talvez resultado-final ( handler condicao )))))))<br />

A macro try aceita um procedimento de tratamento de erros e outro procedimento,<br />

que será chamado.<br />

( try on-error : proc-trata-erro<br />

proc-a-chamar<br />

Quando o procedimento throw é chamado e a continuação usada o controle é transferido<br />

para o início do procedimento talvez. A <strong>com</strong>putação que estava em curso é<br />

abandonada e volta-se ao if; <strong>com</strong>o o valor de retorno do throw será #f, a forma<br />

(handler condicao) é executada.<br />

Se throw não for usada, talvez retornará #t e o if retornará o valor de resultado-final.<br />

O procedimento proc-trata-erro deve aceitar um argumento, e o programador<br />

deverá cuidar para que o tipo de dados passado <strong>com</strong>o argumento para throw funcione<br />

corretamente <strong>com</strong> proc-trata-erro.<br />

( try<br />

on-error : ( lambda (e)<br />

( display ( format " --- ERRO : ~a ---~% " e )))<br />

( display ’ tudo-bem )<br />

( newline )<br />

( throw ’ catastrofe )<br />

( display ’ nunca-chegarei-aqui )<br />

( newline ))<br />

tudo-bem<br />

-- ERRO: catastrofe --<br />

Versão Preliminar<br />

Há um pequeno problema <strong>com</strong> a macro try: ela usa set! para modificar algumas<br />

variáveis locais (condicao, talvez e resultado-final) – o que não tem efeito fora do<br />

escopo do let* – mas também modifica handler. A modificação de handler é visível<br />

após o uso do try:<br />

( try<br />

on-error : ( lambda (e)<br />

( display ( format " --- ERRO : ~a ---~% " e )))<br />

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

205

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

Saved successfully!

Ooh no, something went wrong!