2015-09-24 90 views
0
(deffunction up() 
    ?fact <- u 
    (retract ?fact) 
    (assert (u green)) 

) 

我試圖得到像這樣的工作,一個函數來改變事實的狀態,但是它給了我一個類似的錯誤?事實沒有定義。但我已經做了這個決定。爲什麼這不起作用?如何在檢索中檢索剪輯中的事實索引?

回答

1

函數通過參數接收輸入。規則通過他們的模式接收輸入。如果你想要模式匹配,使用規則:

(defrule up 
    ?fact <- (u) 
    => 
    (retract ?fact) 
    (assert (u green))) 

或者,如果你需要遍歷一個自定義模板中現有的一組事實,你可以用事實設置查詢功能(做換事實上,做所有事實......):

(deffunction up() 
    (do-for-fact ((?fact u)) TRUE 
     (retract ?fact)) 
    (assert (u green)))