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 - Jerônimo C. Pellegrini<br />

6.3.1.6 apply<br />

Quando uma S-expressão não é qualquer das formas especiais (def, set!, quote, if,<br />

lambda, begin, e é uma lista, nosso interpretador presumirá que se trata de uma aplicação<br />

de procedimento. Ele avaliará a cabeça da lista e chamará apply#, que aceita trêss argumentos:<br />

o primeiro deve ser um procedimento, o segundo uma lista de argumentos e o<br />

terceiro é o ambiente a ser usado na avaliação.<br />

(proc (lambda (...args...) ...body...) env)<br />

(car (cdr x))<br />

(list-ref x 2)<br />

( define lambda-args + body ( lambda (x) ( cdr ( car ( cdr x )))))<br />

( define lambda-args ( lambda (x) ( car ( lambda-args + body x ))))<br />

( define lambda-body ( lambda (x) ( cdr ( lambda-args + body x ))))<br />

( define lambda-env ( lambda (x) ( list-ref x 2)))<br />

( define apply #<br />

( lambda ( proc args env )<br />

( cond (( primitive-proc proc )<br />

( apply proc ( map ( lambda (a)<br />

( else<br />

( eval # a env ))<br />

args )))<br />

( eval-seq ( lambda-body proc )<br />

( extend-env ( lambda-args proc )<br />

( map ( lambda (a)<br />

( eval # a env ))<br />

args )<br />

( lambda-env proc )))))))<br />

Se um procedimento é primitivo, apply simplesmente usa o apply da implementação<br />

Versão Preliminar<br />

subjacente de <strong>Scheme</strong>, passando a ele o procedimento e os argumentos, já avaliados.<br />

Se o procedimento não é primitivo, então ele é representado <strong>com</strong>o um objeto <strong>com</strong><br />

tres partes: argumentos formais, corpo e ambiente (este é o ambiente em vigor quando o<br />

procedimento foi definido). Para avaliar um objeto deste tipo nosso interpretador:<br />

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