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

6 E VA L<br />

O Capítulo 1 mencionou brevemente o Read-Eval-Print Loop; read e print são procedimentos<br />

simples para entrada e saída de dados, descritos no Capítulo 2, mas eval está no<br />

coração de um interpretador <strong>Scheme</strong>.<br />

Em <strong>Scheme</strong>, o procedimento eval aceita um trecho de código, uma especificação de<br />

ambiente, e então avalia o código usando aquele ambiente:<br />

( eval codigo ambiente )<br />

O ambiente passado para eval pode ser obtido de três diferentes procedimentos. O<br />

primeiro deles, (scheme-report-environment versao), devolve um ambiente “limpo”,<br />

<strong>com</strong> apenas as vinculações dos símbolos definidos pelo padrão <strong>Scheme</strong> determinado<br />

por versao (por exemplo 5 para R 5 RS). Já null-environment devolve um ambiente <strong>com</strong><br />

apenas os nomes das formas especiais do padrão <strong>Scheme</strong> 1 :<br />

(eval ’if (null-environment 5))<br />

#<br />

(eval ’+ (null-environment 5))<br />

Unbound variable: +<br />

O terceiro procedimento, (interaction-environment), devolve o ambiente usado<br />

no momento em que foi chamado. O próximo exemplo ilustra a diferença entre os<br />

procedimentos scheme-report-environment e interaction-environment.<br />

(define + -)<br />

No ambiente atual a conta não funciona:<br />

(+ 4 3)<br />

1<br />

(eval ’(+ 4 3) (interaction-environment 5))<br />

1<br />

Versão Preliminar<br />

Usando o ambiente padrão:<br />

1 Nem toda implementação de <strong>Scheme</strong> retornará alguma informação a respeito de formas especiais; algumas<br />

delas, diante de uma tentativa de avaliar o símbolo if, simplesmente devovlerão uma mensagem de erro.<br />

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

137

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

Saved successfully!

Ooh no, something went wrong!