根据我在“匹配”步骤中的理解,可以“启用”几个规则,因为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>
答案 0 :(得分:3)
冲突解决不会阻止两个规则被触发 - 它只是确定首先触发的规则。如果您只想触发两个规则中的一个,那么您应该在所选规则的RHS中收回testfact1
,或者通过其他方式从议程中删除其他规则(例如,使用控制事实)。