所以这里有一个关于方案变量绑定的问题。假设我有以下功能:
(define undefinedTest (lambda (y) (list x y)))
当在 Guile-Scheme 2.0.3 中运行时,这将警告 x 是一个未绑定的变量。如果我然后执行以下语句
> (let ((x 'something)) (undefinedTest 'else))
我会得到一个错误和调试它的选项。但是,如果我执行以下语句:
> (define x 'something)
> (undefinedTest 'else)
我得到了(其他)的预期答案。为什么scheme在顶层定义时能够绑定x,但在let绑定时不能。这是因为当函数被定义时,它也是在顶层定义的,所以当scheme去搜索它最近的封闭环境时,let环境实际上并没有“封闭”,因为它仍然在“top-等级”?