在 Section 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)
用 this diagram 解释.
每次应用函数时,都会创建一个新框架(由
E1
到 E4
标记),它表示符号和值之间的一组绑定(bind)。当符号未绑定(bind)在框架中时,将查询该框架的封闭环境以获取该特定符号的绑定(bind)。该图的有趣之处在于所有由
E
标记的帧。包含在全局环境中。文中解释说这是因为函数是在全局环境中定义的,但没有详细说明这个问题:Notice that each frame created by
square
points to the global environment, since this is the environment indicated by thesquare
procedure object.
相反,如果框架包含在调用函数的环境中,例如
E3
包含在 E2
中它又包含在 E1
中,这将是动态范围语言如何工作的有效模型吗?此外,图中的框架是否具有相同的“父”环境,因为 Scheme 是词法范围的?
最佳答案
这两个问题的答案都是是的 . SICP 的那一章是在解释词法范围而没有实际使用该术语。按照您的描述更改评估机制将创建一个动态范围的模型。
关于scheme - 就 SICP 的评估环境模型而言,词法与动态范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12763979/