mit方案中的结合和突变

问题描述

1 ]=> (define a (lambda () ((lambda () (set! x 199)))
                           (define x 10)))

;Value: a

1 ]=> (a)

;Value: 199

1 ]=> (define a (lambda () (set! x 199)
                           (define x 10)))

;Can't define name; already free: x

我不明白那些定义define行为的人的想法。。。为什么允许第一种情况而不允许第二种情况?

在此进行绑定的逻辑是什么?

Nota bene:

local define r6rs 中定义为letrec*,在 R5RS 中定义为letrec,在异常情况下未定义。这为每个实现提供自由,以决定如何实现它们。我的问题是- mit-scheme如何实现本地定义,并且为什么选择这样做?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)