variables - Symbol 作为变量的值是 void:运行 element-of-setp 时为 false
问题描述
按照 SICP 的指令,我将它的交集重写为:
(defun intersection-set (set1 set2)
(cond ((or (null set1) (null set2)) '())
((element-of-setp (car set1) set2)
(cons (car set1)
(intersection-set (cdr set1) set2)))
(t (intersection-set (cdr set1) set2))))
(defun element-of-setp(x set)
(cond ((null set) false)
((equal x (car set)) t)
(t (element-of-setp x (cdr set)))))
(intersection-set (list 1 2) (list 2 3 4))
运行它会报告以下错误:
element-of-setp: Symbol’s value as variable is void: false
但是,element-of-setp
它本身似乎可以正常工作:
#+begin_src emacs-lisp :tangle yes
(defun element-of-setp(x set)
(cond ((null set) false)
((equal x (car set)) t)
(t (element-of-setp x (cdr set)))))
(element-of-setp 1 (list 1 2 3))
#+end_src
#+RESULTS:
: t
有什么问题?
解决方案
但是,
element-of-setp
它本身似乎可以正常工作:
不幸的是,您使用的测试并未涵盖所有可能的情况。
如果您尝试改为:
(element-of-setp 5 (list 1 2 3))
然后该函数将到达列表为空的情况,并且它将评估false
,这很可能是未定义的;如评论中所述,Emacs-Lisp 中的布尔值由nil
非nil
值(原子)表示。
推荐阅读
- python - “nomkl”Python 包是做什么用的?
- html - 导航栏中的用户菜单下拉菜单
- javascript - jQuery DataTable 自定义按钮正则表达式列搜索
- python - 我用 python 中的 pygame 制作的 FlappyBird 的 DQN 不要学习
- flutter - 带有边框、形状和三部分的自定义卡片或容器
- sql - 有没有办法选择/列出哪些点与使用 oracle 空间的线型实体的起点/终点在空间上相关?
- reactjs - history.push('/something') 确实推送,但不渲染组件,因为 framer-motion 的 Animate Presence 的 exitBeforeEnter 属性
- javascript - 如何将变量从 React 中的处理程序传递到其他代码区域?
- python - 如何调用函数并将其打印在引号内?
- python - 如何使用 python 请求通过谷歌驱动 API 上传和删除文件