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

o menor erro possível. Se nos restringíssemos a funões lineares, teríamos um problema de<br />

regressão linear. No entanto, não imporemos qualquer restrição à estrutura da função.<br />

Em nosso exemplo Um indivíduo na população de programas será uma forma <strong>Scheme</strong><br />

<strong>com</strong>o por exemplo (+ (* 4 (sin x)) (/ 5 x)). A função de fitness só precisa avaliar a<br />

expressão – para isto ela deve ser transformada em uma expressão λ:<br />

( define sexp- > lambda<br />

( lambda ( var exp )<br />

( list ’lambda ‘(, var ) exp )))<br />

A lista ’(+ (* 4 (sin x)) (/ 5 x)) representaria, então, a função 4 sin(x) + 5/x, e<br />

o procedimento sexp->lambda a transformará em uma lista representando uma função<br />

anônima <strong>Scheme</strong>:<br />

(sexp->lambda ’x ’(+ (* 4 (sin x)) (/ 5 x)))<br />

(lambda (x) (+ (* 4 (sin x)) (/ 5 x)))<br />

Esta função anônima pode ser passada para eval<br />

(define expr (sexp->lambda ’x ’(+ (* 4 (sin x)) (/ 5 x))))<br />

(eval (list expr 1))<br />

8.36588393923159<br />

((eval expr) 1)<br />

8.36588393923159<br />

O procedimento sum-squares calcula a soma dos quadrados de uma lista:<br />

( define sum-squares<br />

( lambda (l)<br />

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

( reduce + 0<br />

( map square l )))))<br />

Versão Preliminar<br />

O procedimento get-fitness retorna um procedimento para calcular a adequação de<br />

um indivíduo. Recebe uma lista de pontos e outra de valores. Devolve um procedimento<br />

que se lembra dos valores e pontos originais e sabe calcular o erro quadrático do indivíduo:<br />

calcula cada valor aproximado <strong>com</strong> (map funcao valores) e depois cria uma lista <strong>com</strong><br />

a diferença entre os valores corretos e os valores dados pela nova função, <strong>com</strong> map -<br />

valores valores-bons. Em seguida devolve a soma dos quadrados da lista diferenca.<br />

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

141

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

Saved successfully!

Ooh no, something went wrong!