如何在deffunction中检索剪辑中的事实索引?

时间:2015-09-24 20:12:36

标签: clips

(deffunction up ()
     ?fact <- u
    (retract ?fact)
    (assert (u green))

)

我试图让这样的东西起作用,这是一个改变事实状态的函数,但是这样就给了我一个类似的错误?事实没有定义。但我这样做了一次。为什么这不起作用?

1 个答案:

答案 0 :(得分:1)

函数通过参数接收输入。规则通过其模式接收输入。如果要进行模式匹配,请使用以下规则:

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

或者,如果你需要迭代现有的一组事实来进行deftemplate,你可以使用事实集查询函数(do-for-fact,do-for-all-facts,......):

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