我定义了一个接受 lambda 的布尔 Jess 函数,如下所示:
(deffunction at-least(?n ?lambda $?values)
(>= (length$ (filter ?lambda ?values)) ?n))
我可以这样称呼:
(bind ?condition1 (at-least 1 (lambda (?arg) (= ?arg 0)) ?a ?b ?c))
(bind ?condition2 (at-least 2 (lambda (?arg) (< ?arg 0)) ?a ?b ?c))
这工作得很好。但是我在许多不同的地方使用相同的 lambda,所以我想通过为它们定义一些函数来使代码更简洁:
(deffunction fn-zero()
(lambda (?arg) (= ?arg 0)))
并这样称呼它:
(bind ?condition1 (at-least 1 (fn-zero) ?a ?b ?c))
这也很好用。
但是一旦我想添加一个参数,我就会收到一条错误消息。我有这个代码:
(deffunction fn-less-than(?x)
(lambda (?arg) (< ?arg ?x)))
(bind ?condition2 (at-least 1 (fn-less-than 0) ?a ?b ?c))
它抛出以下异常:
jess.JessException: No such variable x
我无法弄清楚我在这里做错了什么。为什么这适用于没有参数的函数,但不适用于有参数的函数?更重要的是:我怎样才能使这项工作?