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

时间:2015-08-01 14:49:56

标签: function recursion elisp

我目前正在努力使用此功能来过滤值。

Highlighter highlighter = textArea.getHighlighter();
highlighter.addHighlight(...);

使用

调用此函数
(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

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

1 个答案:

答案 0 :(得分:3)

错误消息Symbol's function definition is void: operator引用此行:

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

您正在尝试访问名为operator函数,该函数不存在,因为operator只是一个函数参数(正常变量)。 (此参数恰好绑定到函数值,但这无关紧要。)

这应该解决它:

        (filter operator val (rest sequence))