为什么根据这本书,CL中两个“非”函数的函数组合会导致nil?

Ped*_*ino 1 common-lisp negation

我正在学习《Common LISP: A Gentle Introduction to Symbolic Computation》这本书。这本书大约有 40 年的历史,显然,有点经典。

在第 1 章中,作者使用框来解释具有输入和输出的函数。这是其中一张图: 在此处输入图片说明

其实上图就是这个问题的答案。我得到了第一个问题和第二个问题: 在此处输入图片说明

然而,第三个问题似乎很奇怪: 在此处输入图片说明

(not (not ...)) 的组成取决于“...”变量部分。例如,终端显示:

CL-USER> (not (not 12))
T
CL-USER> (not (not nil))
NIL
Run Code Online (Sandbox Code Playgroud)

这本书的练习在某些方面似乎是错误的。但是,由于我对 CL 不太了解,我认为最好问问更有经验的 CL 开发人员是否也认为这是答卷中的一个奇怪点。

我正在使用 SBCL、Slime 和 Common Lisp。我是 CL 的新手,但我在 Racket 方面有一些经验。

提前致谢

Rai*_*wig 5

练习 1.14:

实际上作者希望我们使用符号NOT作为函数的输入NOT。输入不是命名的函数NOT,也不是命名的变量NOT。因此需要在计算中引用符号:

> (NOT 'NOT)
NIL
Run Code Online (Sandbox Code Playgroud)

由于每个符号都是,非就是。Common Lisp 中的false是符号NIL

符号NIL和之间有什么区别NOT

  • NIL 对自己进行评估
  • NOT没有默认值并计算为变量。要将符号评估NOT为自身,需要引用它。

这在旧版本的第3.8使用符号和列表作为数据进行了解释。

  • 啊,对,完全有道理。(永远不要在没有检查的情况下相信OP的声明!)如果他们包含了前面的例子“FRED --> [ NOT ] --> NIL”,那就更清楚了。这本书还处于早期阶段,仍然只涉及符号和数字...... (2认同)