【问题标题】:Invalid Function Elisp无效的函数 Elisp
【发布时间】:2019-04-24 01:49:11
【问题描述】:

我有以下代码:

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

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

【问题讨论】:

  • 没有任何迹象表明这应该做什么,我们只能推测。 (defun rember (lambda (a lat) ...)) 应该是 (defun rember (a lat) ...)
  • (defun rember (...)) 是一个名为 rember 的函数,它接受一个参数列表 ... 并返回 nil。在您的情况下,参数列表无效。

标签: elisp


【解决方案1】:

看起来您正在混合使用 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 来代替。)

【讨论】:

  • 谢谢!这是有道理的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-28
  • 2013-05-09
  • 2011-01-27
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多