Scheme SICP中的词汇与动态范围界定';s环境评价模型

Scheme SICP中的词汇与动态范围界定';s环境评价模型,scheme,sicp,lexical-scope,dynamic-scope,Scheme,Sicp,Lexical Scope,Dynamic Scope,在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),它表示符号和值之间的一组绑定。当符号未绑定到框架中时,将查询该框架的封闭环境以获取该特定符号的

在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
中,而E2又包含在
E1
中,那么这是否是动态范围语言工作方式的有效模型?此外,图中的框架是否具有相同的“父”环境,因为Scheme在词汇范围内?

这两个问题的答案都是。SICP的那一章解释的是词汇范围,而没有实际使用这个术语。如您所述更改评估机制将创建动态范围模型