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

• Temos que definir getters e setters manualmente, e de forma inconveniente para<br />

cada estrutura;<br />

• Temos que lidar <strong>com</strong> detalhes que não nos deveriam interessar, <strong>com</strong>o o primeiro<br />

elemento da lista, que a identifica <strong>com</strong>o partícula;<br />

• O esquema é ineficiente para tipos <strong>com</strong> muitos campos, já que a busca em listas é<br />

feita linearmente 2 .<br />

Usar hashtables poderia tornar os acessores mais rápidos:<br />

( define faz-particula<br />

( lambda ()<br />

( let ((p make-hash-table ))<br />

( hash-table-set ! ’ sou-particula #t)<br />

p )))<br />

( define particula <br />

( lambda (p)<br />

( hash-table-exists p ’ sou-particula )))<br />

( define pos<br />

( lambda (p)<br />

( hash-table-ref p ’pos )))<br />

No entanto, as hashtables podem consumir mais memória que listas ou vetores feitos<br />

"sob medida", e ainda temos que especificar todos os setters e getters manualmente, assim<br />

<strong>com</strong>o o predicado particula e o procedimento faz-particula.<br />

O ideal é construir um mecanismo que nos permita abstrair qualquer estrutura onde<br />

há diversos elementos referenciados por procedimentos.<br />

Queremos armazenar os campos da estrutura em um vetor, para que o acesso seja<br />

rápido, e também queremos poder apenas enumerar as partes da estrutura e talvez os<br />

nomes dos procedimentos para acessar estas partes, mas certamente não queremos ter<br />

que pensar na implementação destes procedimentos.<br />

Armazenaremos a estrutura inteira em um vetor, e usaremos a primeira posição para<br />

Versão Preliminar<br />

armazenar o nome do tipo da estrutura:<br />

2 Implementações de <strong>Scheme</strong> podem, no entanto, armazenar alguns dos primeiros elementos de lsitas de<br />

forma otimizada – o que não invalida nosso argumento.<br />

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

187

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

Saved successfully!

Ooh no, something went wrong!