冲突解决步骤在CLIPS中触发两条规则

时间:2014-11-07 12:08:54

标签: clips expert-system

根据我在“匹配”步骤中的理解,可以“启用”几个规则,因为WM的事实满足了它们的条件。但是我认为在冲突解决步骤中只会触发议程中的一条规则。

现在我有一个程序,其中2个规则被启用到议程和运行步骤都被解雇!难道不是只有一条规则被解雇了吗?

CLIPS> (defrule testrule1 (declare (salience 1)) 
(testfact1) (testfact2) => (printout t "testrule1 firing." crlf))
CLIPS> (defrule testrule2 
(testfact1) => (printout t "testrule2 firing." crlf))
CLIPS> (assert (testfact1) (testfact2))
==> f-1     (testfact1)
==> Activation 0      testrule2: f-1
==> f-2     (testfact2)
==> Activation 1      testrule1: f-1,f-2
<Fact-2>
CLIPS> (agenda)
1      testrule1: f-1,f-2
0      testrule2: f-1
For a total of 2 activations.
CLIPS> (run)
FIRE    1 testrule1: f-1,f-2
testrule1 firing.
FIRE    2 testrule2: f-1
testrule2 firing.
CLIPS> 

1 个答案:

答案 0 :(得分:3)

冲突解决不会阻止两个规则被触发 - 它只是确定首先触发的规则。如果您只想触发两个规则中的一个,那么您应该在所选规则的RHS中收回testfact1,或者通过其他方式从议程中删除其他规则(例如,使用控制事实)。