无效的函数Elisp

问题描述 投票:-1回答:1

我有以下代码:

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

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

elisp
1个回答
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)))))))

(接下来你会发现else没有在Emacs Lisp中的cond中特别处理,所以你需要使用t代替。)

© www.soinside.com 2019 - 2024. All rights reserved.