scheme - 就 SICP 的评估环境模型而言,词法与动态范围

标签 scheme sicp lexical-scope dynamic-scope

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 解释.

每次应用函数时,都会创建一个新框架(由 E1E4 标记),它表示符号和值之间的一组绑定(bind)。当符号未绑定(bind)在框架中时,将查询该框架的封闭环境以获取该特定符号的绑定(bind)。

该图的有趣之处在于所有由 E 标记的帧。包含在全局环境中。文中解释说这是因为函数是在全局环境中定义的,但没有详细说明这个问题:

Notice that each frame created by square points to the global environment, since this is the environment indicated by the square procedure object.



相反,如果框架包含在调用函数的环境中,例如 E3包含在 E2 中它又包含在 E1 中,这将是动态范围语言如何工作的有效模型吗?此外,图中的框架是否具有相同的“父”环境,因为 Scheme 是词法范围的?

最佳答案

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

关于scheme - 就 SICP 的评估环境模型而言,词法与动态范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12763979/

相关文章:

opengl - OpenGL/Scheme 组合的建议

javascript - Streamjs和linqjs有什么关系

scheme - SICP Ex。 1.17 - "fast-multiply"比 "multiply"慢?

r - 了解嵌套函数的作用域

作为对象的 JavaScript 词法环境

scheme - 方案中的可变参数函数

scheme - 加载文件时如何关闭 MIT-Scheme 中的解释器日志

functional-programming - 经验丰富的计划者,letcc 和诡计

computer-science - SICP统一算法中看似不必要的情况

r - 为什么在函数中使用变量会在使用超赋值 (<<-) 运算符时更改 R 中返回的值?