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

1.3.3 Primeiro modelo de avaliação para expressões<br />

(esta seção está in<strong>com</strong>pleta)<br />

Para determinar <strong>com</strong>o um interpretador <strong>Scheme</strong> tratará uma aplicação de procedimento<br />

<strong>com</strong>posto usamos um modelo de avaliação.<br />

• Se a expressão é uma constante, o valor retornado será a própria constante;<br />

• Se a expressão é um símbolo, e este símbolo estiver associado a uma variável, o<br />

valor da variável será retornado;<br />

• Se a expressão é uma lista, há dois casos:<br />

– Se o primeiro elemento da lista for o nome de uma forma especial (por exemplo,<br />

lambda, quote ou define), esta expressão será tratada de maneira específica<br />

para cada forma especial (lambda cria um procedimento, define vincula símbolos<br />

a variáveis, quote retorna seu argumento sem que ele seja avaliado);<br />

– Em outros casos, o interpretador avaliará cada elemento da lista. Depois disso,<br />

verificará se o primeiro elemento é um procedimento. Se não for, o usuário<br />

<strong>com</strong>eteu um erro. Se o primeiro elemento for um procedimento, ele será<br />

aplicado <strong>com</strong> os outros <strong>com</strong>o argumentos. Para avaliar a aplicação de um<br />

procedimento <strong>com</strong>posto, o ambiente <strong>Scheme</strong> avaliará o corpo do procedimento,<br />

trocando cada parametro formal pelo parametro real.<br />

Este modelo de avaliação é útil para <strong>com</strong>preender o processo de aplicação de procedimentos,<br />

mas não é necessariamente a maneira <strong>com</strong>o ambientes <strong>Scheme</strong> realmente fazem<br />

a avaliação de formas.<br />

Como exemplo, avaliaremos (juros-<strong>com</strong>postos 500 0.02 10). Reescrevemos, então,<br />

o corpo do procedimento, trocando os parâmetros formais v, i e t pelos parametros reais<br />

500, 0.02 e 10:<br />

Versão Preliminar<br />

( juros-<strong>com</strong>postos 500 0.02 10)<br />

=> (* 500 ( expt (+ 1.0 0.02) 10))<br />

Agora não há mais procedimentos <strong>com</strong>postos, e podemos aplicar cada procedimento<br />

primitivo, avaliando sempre os argumentos antes de aplicar os procedimentos:<br />

(* 500 ( expt (+ 1.0 0.02) 10))<br />

=> (* 500 ( expt 1.02 10))<br />

=> (* 500 1.21899441999476)<br />

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

11

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

Saved successfully!

Ooh no, something went wrong!