Scheme中的“not”行为

时间:2016-04-13 12:53:36

标签: scheme racket sicp

为什么Scheme解释器需要not的数字参数?

就我而言:

(not (= 1 2))返回以下错误:

-: contract violation
  expected: number?
  given: #f
  context...:
   stdin::1135: not

这与我对SICP的20分钟经验相反,根据该经验,not是一个逻辑组合运算符,其操作数也应该是合乎逻辑的。

这是最有趣的部分:错误不可复制。我知道这听起来很愚蠢,但是我发布了一次Racket,得到了这个错误,重新启动它并且错误消失了(即not切换到返回正确的逻辑值)。有没有人知道为什么会发生这种情况?有什么我不知道会影响Scheme或Racket的行为吗?

注意:在任何情况下,我都没有以任何方式修改环境。我唯一做的就是输入上面的表达式。

1 个答案:

答案 0 :(得分:0)

就是说我做了:

我在guile,gambit,chicken,drracket 6.4中测试(not (= 1 2)),他们都按预期返回#t

因此,您的安装或环境中肯定存在一些问题。要找到它,我们需要更多信息。