elisp,将函数作为参数传递并调用它,发生Eval错误,为什么?

时间:2013-12-19 10:45:31

标签: emacs elisp

我的elisp程序是:

(defun test (f x) (f x))
(test (lambda (x) (* x x)) 10)

运行它,发生错误:

* Eval error * 符号的函数定义为void:f

2 个答案:

答案 0 :(得分:10)

Emacs是一个lisp-2,因此函数和变量有不同的命名空间。因此,在测试中,第二个(f x)中的f与参数列表中的(f)不同。

尝试

(defun test (f x) (funcall f x))

一切都很好。

答案 1 :(得分:1)

以下是更正:

(defun test (f x)
  (funcall f x))

(test (lambda (x) (* x x)) 10)