我有以下代码:
(defun rember
(lambda (a lat)
(cond
((null lat) '())
(else (cond
((eq (car lat) a) (cdr lat))
(else (rember a
(cdr lat))))))))
(rember 2 '(4 5 6 7))
使用C-x C-e
运行此命令时,出现以下错误:
Invalid function: (lambda (lambda (a lat) (cond ((null lat) (quote nil)) (else (cond\
((eq (car lat) a) (cdr lat)) (else (rember a (cdr lat))))))) nil)
我不知道为什么。有人可以帮忙吗?
答案 0 :(得分:0)
好像您要混合使用Lisp和Scheme语法来定义函数。在Lisp中,当您使用defun
而不是defvar
时,已经暗示您正在定义一个函数,因此无需将代码包装在lambda
中:
(defun rember (a lat)
(cond
((null lat) '())
(else (cond
((eq (car lat) a) (cdr lat))
(else (rember a
(cdr lat)))))))
(接下来,您会发现Emacs Lisp中的else
在cond
内部没有得到特殊处理,因此您需要使用t
。)