Подтвердить что ты не робот

Лексическая и динамическая оценка в рамках SICP Environment Model of Evaluation

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

4b9b3361

Ответ 1

Ответ на оба вопроса: да. Эта глава SICP объясняет лексический охват, фактически не используя этот термин. Изменение механизма оценки, как вы описали, создало бы модель с динамической областью.