次のように、ラムダを受け入れるブール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))
これは問題なく機能します。しかし、私は多くの異なる場所で同じラムダを使用しているので、それらの関数を定義することで、コードをもう少し簡潔にしたいと思います。
(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
ここで何が間違っているのか理解できません。これがパラメーターのない関数では機能するのに、パラメーターのある関数では機能しないのはなぜですか?さらに重要なのは、どうすればこれを機能させることができるかということです。