首页 > 解决方案 > 为什么根据这本书,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 方面有一些经验。

提前致谢

标签: common-lispnegation

解决方案


练习 1.14:

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

> (NOT 'NOT)
NIL

既然每一个符号都是真的,不是真的就是的。Common Lisp 中的false是符号NIL

NIL符号和有什么不同NOT

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

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


推荐阅读