你怎么测试的事实存在,以在规则的RHS 剪辑的?我试图 设计规则很多目标事实如何存在的,以计数,将“分数”的当前状态。很明显如何测试在LHS事实,但我找不到怎么办相当于在RHS。

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

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

这样,如果没有目标状态的存在,那么就存在这样的事实(评分(值0))。相反,如果所有的目标状态存在的话,那就存在的事实(分数(值3))。

在参考手册中提到的功能事实existp,但这似乎需要它传递一个事实地址。我试图使用它像(实况existp(目标-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)))))
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top