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

Другие вопросы по тегам