我有以下代码:
(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)
我不知道为什么。有人可以帮忙吗?
看起来你正在混合使用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)))))))
(接下来你会发现else
没有在Emacs Lisp中的cond
中特别处理,所以你需要使用t
代替。)