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

Podemos testar nth-nonempty-sublist:<br />

(do ((i 0 (+ 1 i )))<br />

((= i 12))<br />

( display " ===========\ n")<br />

( newline )<br />

( display i)<br />

( display "th: ")<br />

( display "-- ")<br />

( display ( nth-nonempty-sublist ’(1 (2) (3 (4 5) 6) 7) i))<br />

( newline ))<br />

O operador de cross-over seleciona um ponto aleatóreo em cada uma das duas listas<br />

e troca os cdrs nestes dois pontos, retornando duas novas listas.<br />

( define cross-over !<br />

( lambda (A B)<br />

( let (( size-A ( count-nonempty-sublists A))<br />

( size-B ( count-nonempty-sublists B )))<br />

( let (( idx-A ( random-integer size-A ))<br />

( idx-B ( random-integer size-B )))<br />

( let (( ptr-A ( nth-nonempty-sublist A idx-A ))<br />

( ptr-B ( nth-nonempty-sublist B idx-B )))<br />

( swap-cdr ! ptr-A ptr-B ))))))<br />

Os operadores são armazenados em listas e classificados por aridade.<br />

( define ops-by-arity<br />

’((1 ’( inv sqrt log exp abs sin cos tan asin acos atan ))<br />

(2 ’( expt ))<br />

(n ’(+ - * /))))<br />

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

6.3 scheme em scheme<br />

Versão Preliminar<br />

Dois procedimentos formam o coração de um interpretador <strong>Scheme</strong>: eval e apply; o<br />

primeiro avalia formas, e o segundo aplica procedimentos. Nesta seção construiremos em<br />

<strong>Scheme</strong> um interpretador <strong>Scheme</strong> minimalista, incluindo eval, apply e um REPL. Nosso<br />

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

145

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

Saved successfully!

Ooh no, something went wrong!