计算剪辑规则RHS中的现有事实

时间:2010-09-02 18:37:57

标签: artificial-intelligence expert-system clips jess

如何在Clips中的规则的RHS中测试事实存在?我试着 设计一个规则,通过计算存在多少目标事实来“评分”当前状态。很明显如何在LHS中测试事实,但我无法在RHS中找到如何做等效事项。

我想做这样的事情,虽然这不是有效的剪辑代码:

(defrule score-state ""
    ?score <- (score (value ?value))
    =>
    (modify ?score (value (+ (exists (goal-1)) (exists (goal-2)) (exists (goal-3))))))

因此,如果没有目标状态存在,则存在事实(得分(值0))。相反,如果所有目标状态都存在,则存在事实(得分(值3))。

参考手册提到函数fact-existp,但这似乎要求它传递一个事实地址。我尝试使用它(fact-existp(goal-1)),但Clips给我一个语法错误。

1 个答案:

答案 0 :(得分:1)

(deftemplate score
   (slot value))

(deftemplate goal-1)

(deftemplate goal-2)

(deftemplate goal-3)

(deffacts start
   (score (value undefined))
   (goal-1)
   (goal-3))

(deffunction ecount (?g)
   (if (any-factp ((?f ?g)) TRUE)
      then (return 1)
      else (return 0)))

(defrule score-state ""
    ?score <- (score (value undefined))
    =>
    (modify ?score (value (+ (ecount goal-1) (ecount goal-2) (ecount goal-3)))))