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

7.7 abstração de dados <strong>com</strong> macros<br />

No Capítulo 1 construímos abstrações de diferentes objetos através da elaboração de<br />

procedimentos que operam sobre eles. Internamente, agregamos as partes de cada objeto<br />

em listas. Este Capítulo mostra algumas limitações da representação interna <strong>com</strong> listas e<br />

discute uma abstração sintática para representar objetos.<br />

listas.<br />

Uma maneira supostamente natural de representar partículas em <strong>Scheme</strong> é usando<br />

( define faz-particula<br />

( lambda ( pos massa vel acel )<br />

( list ’ particula pos massa vel acel )))<br />

O primeiro elemento da lista é um símbolo que determina o tipo de dado “partícula”.<br />

O procedimento particula pode então verificar se um objeto <strong>Scheme</strong> é uma partícula:<br />

( define particula <br />

( lambda (p)<br />

( and ( list p)<br />

( not ( null p))<br />

( eqv ’ particula ( car p )))))<br />

Precisamos também de acessores para cada campo do objeto partícula. Criamos então<br />

uma barreira de abstração para isolar os procedimentos para listas:<br />

( define pos ( lambda (x) ( list-ref x 1)))<br />

( define massa ( lambda (x) ( list-ref x 2)))<br />

( define vel ( lambda (x) ( list-ref x 3)))<br />

( define acel ( lambda (x) ( list-ref x 4)))<br />

( define set-pos !<br />

( lambda (p v) ( set-car ! ( list-tail p 1) v )))<br />

( define set-massa !<br />

( lambda (p v) ( set-car ! ( list-tail p 2) v )))<br />

( define set-vel !<br />

Versão Preliminar<br />

( lambda (p v) ( set-car ! ( list-tail p 3) v )))<br />

( define set-acel !<br />

( lambda (p v) ( set-car ! ( list-tail p 4) v )))<br />

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

185

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

Saved successfully!

Ooh no, something went wrong!