【发布时间】:2012-11-14 00:57:50
【问题描述】:
以下方案代码
(let ((x 1))
(define (f y) (+ x y))
(set! x 2)
(f 3) )
计算结果为 5 而不是 4。令人惊讶的是,Scheme 促进了静态作用域。允许后续突变影响闭包中封闭环境中的绑定似乎恢复到有点动态范围。允许的任何具体原因?
编辑:
我意识到上面的代码不太明显地揭示了我所关心的问题。我在下面放了另一个代码片段:
(define x 1)
(define (f y) (+ x y))
(set! x 2)
(f 3) ; evaluates to 5 instead of 4
【问题讨论】:
-
我进行了更改以减少与本地范围的纠缠。
标签: scheme