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

( lambda ( msg )<br />

( case msg<br />

(( get-ports )<br />

( lambda () listen ))<br />

(( add-service )<br />

( lambda ( port )<br />

( set ! listen ( cons port listen ))))<br />

(( remove-service )<br />

( lambda ( port )<br />

( set ! listen ( delete port listen ))))<br />

( else ( my-host msg )))))))<br />

( define s ( make-server ))<br />

((s ’ get-hostname ))<br />

((s ’ set-hostname ) "x")<br />

((s ’ get-hostname ))<br />

((s ’ get-ports ))<br />

((s ’ remove-service ) 22)<br />

((s ’ add-service ) 443)<br />

Como o objetivo desta discussão era apenas o de ilustrar o mecanismo pelo qual<br />

fechos podem emular um sistema de objetos, não foram desenvolvidas facilidades <strong>com</strong>o<br />

uma macro 4 define-class, que a partir de um nome de classe e lista de atributos geraria<br />

um procedimento para criar objetos da classe e outros, para acessar os atributos e métodos.<br />

A possibilidade de implementar fechos está intimamente ligada à disciplina de escopo<br />

léxico, mas nem toda linguagem <strong>com</strong> escopo estático suporta fechos. Em C, por exemplo,<br />

uma função pode retornar um ponteiro para outra função – mas a função retornada não<br />

leva consigo o ambiente em que foi definida, porque em C não há <strong>com</strong>o retornar um<br />

ponteiro para função que não tenha sido definida no nível base.<br />

Versão Preliminar<br />

4 Uma macro é uma forma especial definida pelo usuário.<br />

108<br />

[ 27 de outubro de 2010 at 15:47 ]

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

Saved successfully!

Ooh no, something went wrong!