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

O fitness do indivíduo pefeito é zero:<br />

(define individuo-perfeito ’(+ 1 (* x x)))<br />

(fit (eval (sexp->lambda ’x individuo-perfeito) (interaction-environment)))<br />

0<br />

O operador de mutação pode trocar números ou operadores nas formas <strong>Scheme</strong>; o<br />

de cross-over deve trocar sub-árvores (ou sub-expressões) de dois indivíduos.<br />

Usaremos list-reduce e list-filter, além de list-count, que conta a quantidade<br />

de átomos em uma lista, inclusive em suas sublistas:<br />

( define list-count<br />

( lambda ( lst )<br />

(+ ( length lst )<br />

( list-reduce + 0<br />

( map list-count<br />

( list-filter list lst ))))))<br />

O operador de cross-over certamente precisará de um procedimento que troca os cdrs<br />

de duas listas:<br />

( define swap-cdr !<br />

( lambda (a b)<br />

( let (( ptr-a ( cdr a))<br />

( ptr-b ( cdr b )))<br />

( set-cdr ! a ptr-b )<br />

( set-cdr ! b ptr-a ))))<br />

Versão Preliminar<br />

O procedimento deep-for-each aplica um procedimento em todos os átomos de uma<br />

lista, recursivamente.<br />

( define deep-for-each<br />

( lambda ( proc lst )<br />

( define do-it<br />

( lambda (e)<br />

(if ( list e)<br />

( deep-for-each proc e)<br />

( proc e ))))<br />

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

143

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

Saved successfully!

Ooh no, something went wrong!