Лексическая и динамическая область видимости с точки зрения экологической модели оценки 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
это будет правильной моделью того, как работает язык с динамической областью действия? Кроме того, способ, которым кадры на диаграмме имеют одинаковыеродителя среда, потому что схема имеет лексическую область?