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

SRFI-<br />

39<br />

( let (( old-base base ))<br />

( set ! base 16)<br />

( display x)<br />

( newline )<br />

( set ! base old-base )<br />

( display x )))<br />

Cada procedimento teria que se lembrar de modificar os valores de base, usando uma<br />

variável local (para entender porque old-base não pode ser global, basta imaginar o que<br />

aconteceria se calcula também mudasse base usando a mesma global old-base).<br />

Uma solução seria determinar que o procedimento display aceitasse um parâmetro<br />

adicional, base:<br />

( let ((x ( calcula )))<br />

( display x 16)<br />

( newline )<br />

( display x 10))<br />

No entanto, se há muitas variáveis a serem passadas dessa forma, o programa pode<br />

ficar ilegível. Por isso em algumas situações a primeira opção (o uso de escopo dinâmico)<br />

é usada.<br />

Embora em <strong>Scheme</strong> o escopo seja estático 5 , emular escopo dinâmico não é difícil.<br />

A SRFI 39 descreve uma maneira de criar variáveis <strong>com</strong> escopo dinâmico em <strong>Scheme</strong>,<br />

usando um procedimento make-parameter, semelhante à forma especial define, e uma<br />

forma especial parameterize, semelhante ao let.<br />

O procedimento make-parameter cria variáveis, chamadas de objetos-parâmetro 6 , que<br />

podem ter seu valor modificado usando disciplina de escopo léxico. O valor retornado<br />

por make-parameter é um procedimento que aceita um ou nenhum argumento.<br />

(define base (make-parameter 10))<br />

Quando base é chamado sem argumentos, retorna o valor do objeto-parâmetro.<br />

Quando é chamado <strong>com</strong> um argumento, o valor é alterado temporariamente e retornado:<br />

5 Na verdade, <strong>com</strong> as primeiras implementações de <strong>Scheme</strong> Guy Steele e Gerald Sussman conseguiram mudar<br />

a opinião então <strong>com</strong>um, de que o escopo dinâmico era mais simples de implementar.<br />

6 Parameter objects na SRFI 39 e em outros textos em Inglês<br />

Versão Preliminar<br />

110<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!