3
我已經定義了一個接受拉姆達一個布爾傑斯功能,如下所示:傳遞lambda表達式與論據傑西
(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
我想不出我在做什麼錯在這裏。爲什麼這對於不帶參數的函數有效,但對於帶參數的函數不起作用?更重要的是:我該如何做這項工作?
謝謝,這確實有效! – jqno