1

您如何测试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 给了我一个语法错误。

4

1 回答 1

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)))))
于 2012-04-23T19:17:09.753 回答