0

如果我在 jess 中定义了设置规则,是否有任何规则可以根据 LHS 在规则中定义的模式找到可能导致冲突的规则集。

(defrule rule1 (pattern ?x)
=> (printout t "rule 1 failed"))

(defrule rule2 (pattern ?x)
=> (printout t "rule 2fired"))

无论如何找到上面定义的两个规则将来会发生冲突,如果不是在断言所有已激活规则的事实列表时?

4

1 回答 1

0

我不知道你所说的“冲突”是什么意思。如果有两条规则在相同或几乎相同的情况下触发,那么这要么正是程序员想要的,而且它会起作用;这不是这个词的常识中的“冲突”。虽然,如果结果不符合规范,那只是一个错误。

查找任何两个非平凡身份(您的示例平凡)是一项任务,需要回答任何事实对象实例集是否触发两个规则的问题。这相当于回答规则 A 是否定义了一个集合,该集合是规则 B 定义的子集(反之亦然)。

如果约束很简单,那么对约束值的巧妙分析可能会提供答案——但总的来说,它并不那么简单。约束可以使用任意复杂的函数。

于 2015-01-22T16:30:38.557 回答