Seguinte: Âmbito Léxico Acima: Introdução à Linguagem Lisp Anterior: Repetição
Índice remissivo

Modelo de Ambientes

Até agora vimos que as variáveis eram apenas designações para valores. Quando se avaliava uma expressão, as variáveis desapareciam, sendo substituídas pelos seus valores. A partir do momento em que podemos alterar o valor de uma variável, o seu comportamento torna-se menos claro.

Para se explicar correctamente este comportamento é necessário passar para um modelo de avaliação mais elaborado designado modelo de avaliação em ambientes.

Neste modelo, uma variável já não é uma designação de um valor mas sim uma designação de um objecto que contém um valor. Esse objecto pode ser visto como uma caixa onde se guardam coisas. Em cada instante, a variável designa sempre a mesma caixa, mas esta pode guardar coisas diferentes. Segundo o modelo de ambientes, o valor de uma variável é o conteúdo da caixa que ela designa. A forma especial setq é a operação que permite meter valores dentro da caixa.

As variáveis são guardadas em estruturas denominadas enquadramentos. Por exemplo, cada vez que usamos a forma let é criado um novo enquadramento para conter as variáveis estabelecidas pelo let. Todas as expressões pertencentes ao corpo do let serão avaliadas em relação a este enquadramento. Imaginemos agora a seguinte situação:

(let ((x 1))
  (let ((y 2)
        (z 3))
    (+ x y z)))

Neste exemplo, o corpo do primeiro let é um novo let. Existem portanto dois enquadramentos. Estes enquadramentos estão organizados de modo a que o corpo do segundo let consiga fazer referência às três variáveis x, y e z.

Para isso, os enquadramentos são estruturados sequencialmente, desde aquele que for textualmente mais interior até ao mais exterior. Essa sequência de enquadramentos é designada por ambiente.

Cada enquadramento é uma tabela de ligações, que associa as variáveis aos seus valores correspondentes. Uma variável nunca pode estar repetida num enquadramento, embora possa aparecer em vários enquadramentos de um ambiente. Cada enquadramento aponta para o ambiente envolvente, excepto o ambiente global, que é composto por um único enquadramento sem ambiente envolvente. É no ambiente global que estão guardadas todas as funções que usamos normalmente.




Seguinte: Âmbito Léxico Acima: Introdução à Linguagem Lisp Anterior: Repetição
Índice remissivo

Copyright António Leitão, 1995