【发布时间】:2023-04-10 10:14:01
【问题描述】:
按照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
有什么问题?
【问题讨论】:
-
没有
false,而是有nil或() -
错误可能是微不足道的,帮助不是。可以请转发评论回答。 @picklerick
-
我相信你确实知道这一点,但 SICP 是为 Scheme 编写的,而不是 Emacs Lisp,两种语言之间存在显着差异。你不应该期望一个代码在另一个中工作。