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

• Os dois outros elementos são 10 e 15, e serão usados <strong>com</strong>o argumentos para o<br />

procedimento.<br />

Do ponto de vista puramente funcional, faz sentido ler a forma (lambda (a b) (/ 1 (* a b)))<br />

<strong>com</strong>o “troque a e b por (/ 1 (* a b))”.<br />

A lista de argumentos da forma lambda pode ser vazia. O procedimento a seguir é<br />

uma função constante (sempre retorna o número 42):<br />

(lambda () 42)<br />

#<br />

( (lambda () 42) )<br />

42<br />

1.3.2 Exemplo: juros <strong>com</strong>postos<br />

A seguinte expressão é um procedimento que realiza cálculo de juros <strong>com</strong>postos. O valor<br />

total é v(1 + i) t , onde v é o valor do principal, i é a taxa de juros e t é o número de<br />

parcelas.<br />

( lambda (v i t)<br />

(* v ( expt (+ 1.0 i) t )))<br />

O procedimento expt realiza exponenciação.<br />

A definição de um procedimento não é útil por si mesma. Ele pode ser aplicado,<br />

<strong>com</strong>o mostra o exemplo a seguir:<br />

(( lambda (v i t)<br />

(* v ( expt (+ 1.0 i) t )))<br />

1000 0.01 12)<br />

1126.82503013197<br />

No exemplo acima, o REPL recebeu uma forma cujos elementos são:<br />

• Primeiro: (lambda (v i t) (* v (expt (+ 1.0 i) t))<br />

• Segundo: 1000<br />

• Terceiro: 0.01<br />

Versão Preliminar<br />

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

9

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

Saved successfully!

Ooh no, something went wrong!