common-lisp - 为什么根据这本书,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 章将符号和列表用作数据中进行了解释。
推荐阅读
- r - R:如何在 PowerPoint 中添加注释(官员)
- c# - 在窗口窗体页面切换时捕获事件
- python-requests - 我们可以通过 eventlet.patcher.import_patched 修补请求模块吗?
- selenium-webdriver - 浏览器不接受 Selenium sendKeys 到密码输入框
- c# - Linux 上 CMake 中的 C#/Mono
- php - 图像 403 禁止错误
- arrays - 如何在 Codable (Swift) 中保存多个数据
- ios - 在谷歌中输入城市名称后功能未执行 swift 4中的地点选择器
- go - 供应商的层次结构
- python - 不正确和正确的功能将不起作用