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

Criaremos uma imagem 200×200 quadriculada; os quadrados terao 10 pixels de lado.<br />

Para um pixel (x, y), os números ⌊ x 10 ⌋ e ⌊ y 10⌋ descrevem os valores de x e y correspondentes<br />

ao canto superior esquerdo do quadrado 10×10 onde o ponto se encontra.<br />

Plotaremos cada ponto somente quando as paridades destes dois números forem diferentes.<br />

Usaremos para isto um ou exclusivo, que não existe em <strong>Scheme</strong> padrão mas cuja<br />

implementação é extremamente simples:<br />

( define xor<br />

( lambda (a b)<br />

( not ( eqv a b ))))<br />

O predicado even-odd-square determina se um ponto está em um quadrado que<br />

deve ser plotado.<br />

( define even-odd-square <br />

( lambda (i j)<br />

( define f<br />

( lambda (x)<br />

( even ( quotient x 10))))<br />

( xor (f i) (f j ))))<br />

Criaremos um procedimento for-each-pixel! que recebe <strong>com</strong>o argumentos uma<br />

imagem e um procedimento que determina se um ponto deve ser plotado, e modifica os<br />

pixels da imagem dependendo do resultado da aplpicação do procedimento sobre cada<br />

pixel.<br />

( define for-each-pixel !<br />

( lambda ( img pred )<br />

( let ((h ( image-rows img ))<br />

(w ( image-cols img )))<br />

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

((= i h))<br />

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

((= j w))<br />

(if ( pred i j)<br />

( image-set ! img i j white )<br />

( image-set ! img i j black )))))))<br />

Versão Preliminar<br />

Finalmente, draw-image recebe a imagem e um nome de arquivo e grava a imagem<br />

naquele arquivo:<br />

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

121

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

Saved successfully!

Ooh no, something went wrong!