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

• Avalia os argumentos formais no ambiente atual (env);<br />

• Extende o ambiente do procedimento <strong>com</strong> os vínculos avaliados para os parametros<br />

formais;<br />

• Chama eval-seq para avaliar todas as formas no corpo do procedimento <strong>com</strong> este<br />

ambiente extendido.<br />

6.3.1.7 Procedimentos auxiliares<br />

Precisaremos do eval nativo de <strong>Scheme</strong> para inicializar o ambiente de nosso interpretador.<br />

( define scheme-eval<br />

( lambda ( exp )<br />

( eval exp ( interaction-environment ))))<br />

Guardamos em primitive-names uma lista de nomes que usaremos do ambiente<br />

nativo <strong>Scheme</strong>.<br />

( define primitive-names<br />

’(= < > string = string-append + - * /<br />

list car cdr display newline list cons ))<br />

( define primitive-name <br />

( lambda (p)<br />

( member p primitive-names )))<br />

O predicado primitive-proc, usado em apply#, simplesmente verifica se um procedimento<br />

é um daqueles que incluímos na lista de procedimentos nativos:<br />

( define primitive-proc <br />

( lambda (p)<br />

Versão Preliminar<br />

( member p ( map scheme-eval primitive-names ))))<br />

6.3.2 Usando o interpretador<br />

Para testar nosso interpretador, criamos um ambiente vazio:<br />

( define ne ( list ’()))<br />

Incluimos no ambiente os vínculos para diversos procedimentos padrão de <strong>Scheme</strong>:<br />

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

153

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

Saved successfully!

Ooh no, something went wrong!