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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

notas de aula - Jerônimo C. Pellegrini<br />

( define pi 3.1415926536)<br />

( define square<br />

( lambda (x) (* x x )))<br />

Definimos agora que squared-sin é a <strong>com</strong>posição de square <strong>com</strong> seno:<br />

( define squared-sin<br />

(o square sin ))<br />

(square (sin (/ pi 4)))<br />

0.5000000000025517<br />

(squared-sin (/ pi 4))<br />

0.5000000000025517<br />

1.8.2 Currying<br />

Denotamos por (X → Y) o conjunto de todas as funções de X em Y (ou seja, o tipo “função<br />

de X em Y”).<br />

Qualquer função f : A×B → C de dois argumentos pode ser transformada em outra<br />

função f c : A → (B → C) que recebe um único argumento e retorna uma função de um<br />

argumento.<br />

Da mesma forma, dada uma função f : (A 1 × A 2 × · · · × A n ) → B, podemos encontrar<br />

uma função g : A 1 → (A 2 → (A 3 → (· · · → B) · · · ))<br />

O procedimento curry recebe uma função e retorna a versão “curried”.<br />

( define ( curry fun . args )<br />

( lambda x<br />

( apply fun ( append args x ))))<br />

Podemos dfinir um procedimento que nos retorna a potência de dois usando a técnica<br />

de currying sobre expt:<br />

Versão Preliminar<br />

(define power2 (curry expt 2))<br />

(power2 10)<br />

1024<br />

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