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

interpretador não será um ambiente <strong>Scheme</strong> <strong>com</strong>pleto, mas ilustrará claramente <strong>com</strong>o<br />

formas são avaliadas.<br />

O interpretador reconhecerá def ao invés de define para criar vínculos.<br />

6.3.1 Construção do interpretador<br />

Começaremos <strong>com</strong> procedimentos para representar o ambiente; depois, procedimentos<br />

internos do interpretador para criar e modificar vínculos no ambiente <strong>com</strong> def e set!. Em<br />

seguida, implementamos procedimentos que tratam as formas if e lambda. Finalmente<br />

implementaremos eval e apply.<br />

6.3.1.1 Ambiente<br />

Em nosso interpretador o ambiente será representado <strong>com</strong>o uma lista de associações. O<br />

procedimento find-in-env encontra uma variável em um ambiente, sinalizando um erro<br />

quando a variável não for encontrada.<br />

( define find-in-env<br />

( lambda ( var env )<br />

( let (( binding ( assoc var env )))<br />

(if binding<br />

( list-ref binding 1)<br />

( error " Vari á vel não vinculada " var )))))<br />

O procedimento extend-env extende um ambiente <strong>com</strong> novos vínculos: recebe uma<br />

lista de variáveis, uma lista de valores, um ambiente e retorna o novo ambiente, onde<br />

as novas variáveis são vinculadas aos novos valores. Usaremos extend-env quando um<br />

procedimento for aplicado (seus parâmetros, definidos em uma forma lambda, serão<br />

variáveis no ambiente extendido).<br />

Versão Preliminar<br />

( define extend-env<br />

( lambda ( vars values env )<br />

( cond (( or ( null env )<br />

( null vars ))<br />

env )<br />

( else<br />

( cons ( list ( car vars ) ( car values ))<br />

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