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

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

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

其实上图就是这个问题的答案。我得到了第一个问题和第二个问题:

然而,第三个问题似乎很奇怪:

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

CL-USER> (not (not 12))
T
CL-USER> (not (not nil))
NIL

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

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

提前致谢

回答

练习 1.14:

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

> (NOT 'NOT)
NIL

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

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

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

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

  • ah right, makes total sense. (never believe an OP's statement without checking!) if only they'd included the preceding example of `FRED --> [ NOT ] --> NIL`, it'd be that much clearer. it's so early in the book, where it still only deals with symbols and numbers...

以上是为什么根据这本书,CL中两个“非”函数的函数组合会导致nil?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>