Лексическая и динамическая область видимости с точки зрения экологической модели оценки SICP
В разделе 3.2.2 SICP выполнение следующего фрагмента кода
(define (square x)
(* x x))
(define (sum-of-squares x y)
(+ (square x) (square y)))
(define (f a)
(sum-of-squares (+ a 1) (* a 2)))
(f 5)
объясняется в терминах этой диаграммы.
Каждый раз, когда применяется функция, создается новый фрейм E1
через E4
) который представляет собой набор связей между символами и значениями. Когда символ не связан в кадре, окружающая среда этого кадра запрашивается для привязки этого конкретного символа.
Интересно, что на этой диаграмме все кадры помечены E
содержится в глобальной среде. В тексте объясняется, что это потому, что функции были определены в глобальной среде, но не уточняется вопрос:
Обратите внимание, что каждый кадр создан
square
указывает на глобальную среду, так как это среда, обозначеннаяsquare
объект процедуры.
Если вместо этого кадры содержатся в среде, в которой была вызвана функция, скажем, E3
содержался в E2
который в свою очередь содержался в E1
Будет ли это верной моделью того, как работает язык с динамической областью действия? Кроме того, способ, которым кадры на диаграмме имеют ту же "родительскую" среду, поскольку схема имеет лексическую область видимости?
1 ответ
Ответ на оба вопроса - да. Эта глава SICP объясняет лексическую сферу без фактического использования термина. Изменение описанного вами механизма оценки создаст модель с динамической областью действия.