所以我知道,在方案定義是動態作用域並讓靜態範圍,但下面的事情讓我困惑:計劃作用域(定義和讓)
如果我有
(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