无效的函数Elisp

时间:2019-04-24 01:49:12

标签: elisp

我有以下代码:

(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)

我不知道为什么。有人可以帮忙吗?

1 个答案:

答案 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中的elsecond内部没有得到特殊处理,因此您需要使用t。)