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

devem ser globais, passadas <strong>com</strong>o parâmetro ou definidas dentro do procedimento (esta<br />

regra é a que se aplica também a programas C). É importante distinguir entre três tipos<br />

de ambiente:<br />

• Local: contém vinculações para nomes declarados no bloco de código sendo avaliado;<br />

• Não-local: contém vinculações para nomes declarados fora do bloco de código sendo<br />

avaliado;<br />

• Global: contém vinculações para nomes que podem ser acessados em qualquer parte<br />

do programa. Estes nomes são declarados fora de qualquer bloco.<br />

3.2.1 Escopo estático<br />

O escopo de uma vinculação é a parte do programa em que ela é válida.<br />

Usando escopo estático, a vinculação de um nome no ambiente é determinada pelo<br />

seguinte algoritmo:<br />

i) Se o nome foi declarado no bloco sendo avaliado, aquela vinculação será usada.<br />

Caso contrário,<br />

ii) Se o nome não foi declarado no bloco em avaliado, ele deve ser buscado nos blocos<br />

que o envolvem, do imediatamente envolvente até o mais distante. Se todos os<br />

blocos envolventes tiverem sido verificados e a declaração não encontrada,<br />

iii) Se o nome está no ambiente global, aquela vinculação será usada, caso contrário<br />

não há vinculação para aquele nome no ambiente.<br />

Versão Preliminar<br />

Pode-se informalmente dizer que o trecho de código onde um nome é visível é o<br />

bloco onde foi declarado e todos os blocos aninhados dentro dele, e por este motivo<br />

muitas vezes usa-se “escopo léxico” <strong>com</strong>o sinônimo de “escopo estático”.<br />

3.2.2 Cuidados <strong>com</strong> o ambiente global<br />

Poderíamos modificar nosso gerador de números aleatóreos para não precisarmos mais<br />

passar o valor anterior sempre que quisermos obter um número:<br />

( define aleat 112)<br />

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