所以我知道,在方案定义是动态作用域并让静态范围,但下面的事情让我困惑:计划作用域(定义和让)
如果我有
(let ((x 0))
(define f (lambda() x))
(display (f))
(let ((x 1))
(display (f))
)
)
它将显示00.到目前为止很好。但是,如果我为x添加额外的定义,如下所示:
(let ((x 0))
(define f (lambda() x))
(display (f))
(define x 4)
(let ((x 1))
(display (f))
)
)
它将显示undefined4。为什么是这样?后为什么x限定评估˚F影响(F)的返回值?为什么返回值是“undefined”?
还值得一提的是,随着letrec代替结合˚F定义也将工作:
(let ((x 0))
(letrec ((f (lambda() x)))
(display (f))
(define x 4)
(let ((x 1))
(display (f))
)
)
)
返回00
注:我已经使用DrRacket与“漂亮的大”设置languge
你是什么意思“定义为动态范围界定方案”?顺便说一句,除非你被要求使用它的课程,“漂亮大”是一个过时的方言。 – Rhangaun 2013-02-18 23:12:27
Scheme总是使用静态作用域,这是不正确的,说“定义是动态的,让静态作用域” – 2013-02-18 23:16:45
我同意奥斯卡:问题的前提是错误的,或者是使用错误的术语。 – dyoo 2013-02-19 05:19:56