2013-03-30 25 views
0

我在CLIPS以下deftemplates(6.3)的事實:CLIPS找工作不

(deftemplate A (slot a) (slot b)) 
(deftemplate forSearch (slot property)(slot value)) 

我需要閱讀從輸入對(property, value),然後找到事實A在插槽中,其值爲propertyvalue

如果我做這樣的事情:

(defrule r2 
(forSearch (property ?c)(value ?d)) 
(A (?c ?d)) 
=> 
(printout t "debug" crlf) 
) 

我得到以下錯誤:

[PRNTUTIL2] Syntax Error: Check appropriate syntax for deftemplate patterns. 

ERROR: 
(defrule MAIN::r2 
    (forSearch (property ?c) (value ?d)) 
    (A (?c 

我現在應該怎麼辦?

回答

0

您必須在規則的模式匹配部分寫入插槽名稱。

正確sintax是:

(defrule r2 
    (forSearch (property ?c)(value ?d)) 
    (A (a ?c) (b ?d)) 
    => 
    (printout t "debug" crlf) 
) 

我不明白你要完成什麼,我知道它的晚,但希望它幫助。

+0

看來他希望能夠使用'forSearch' deftemplate指定要匹配的'A'插槽,這樣就不需要爲每個插槽分開規則。也就是''c'可以指定槽'a'或槽''b'。 – bogatron

+0

根據CLIPS手冊,我不認爲這是可能的,通配符不能是模式中​​的第一項。 –

+0

如果你使用'fact-slot-value',它可能會工作 –