如何在elisp中递归传递一个函数?

How to pass a function recursively in elisp?

我目前正在努力使用这个旨在过滤值的功能。

(defun filter (operator val sequence)        
    (if (funcall operator val (first sequence)) 
        (filter (function operator) val (rest sequence))
        (cons (list (first sequence)) 
           (filter (function operator) val (rest sequence)))))

调用这个函数
(filter (function >) 6 '(5 6))

给予

*** Eval error ***  Symbol's function definition is void: operator

虽然这段代码工作正常。

(defun example (lhs rhs operator)
  (funcall operator lhs rhs))

(example 4 5 (function +))

=> 9

我的猜测是该函数忘记了它最初是用哪个函数调用的,但我不知道出了什么问题,非常感谢一些正确方向的指示!

错误信息Symbol's function definition is void: operator指的是这一行:

        (filter (function operator) val (rest sequence))

您正在尝试访问一个名为 operator 函数 ,它不存在,因为 operator 只是一个函数参数(一个普通变量). (这个参数刚好绑定了一个函数值,不过没关系。)

这应该可以解决问题:

        (filter operator val (rest sequence))