对于前向链接(LIFO),有人提到
深度策略:新激活的规则放置在所有规则之上 相同的显着性:例如,如果事实 a 激活规则 1 和规则 2 并且事实 b 激活规则 3 和规则 4,然后如果事实 a 被断言 在事实b之前,规则3和规则4将高于规则1和规则2 议程。然而,规则 3 相对于规则 4 的位置将是 任意
所以如果我有以下事实和规则
(deffacts my_facts
(B)
(C))
(defrule r1
(B)(D)(E)=> (assert (F)))
(defrule r2
(C)(D) => (assert (A)))
(defrule r3
(C)(F)=>(assert (A)))
(defrule r4
(B) => (assert (X)))
(defrule r5
(D) => (assert (D)))
(defrule r6
(X)(A) => (assert(H))
(printout t 'H' is reached crlf)
(halt))
(defrule r7
(C)
=> (assert (D)))
(defrule r8
(X)
(C)
=> (assert (A)))
(defrule r9
(X)
(B)
=> (assert (D)))
然后
(reset)
(watch all)
(run)
这个想法是,似乎 r2 总是在 r5 之前被触发,但我认为:
规则 2 相对于规则 5 的位置是任意的,那么为什么我们每次都会在 R5 之前触发 R2 呢?
这是代表案例的图像:
它是任意的,如“基于或由个人偏好或便利决定”,而不是“存在或看似随机出现”。在《基础编程指南》第 5.3 节“冲突解决策略”开头,提到所使用的任意并不意味着随机。
如果一条规则(以及其他几条规则)被相同的激活 断言或撤回事实,步骤 a 和 b 无法 指定一个顺序,则该规则是任意的(不是随机的) 相对于激活它的其他规则进行排序。 请注意,在这方面,定义规则的顺序有一个 对冲突解决的任意影响(高度依赖于 根据当前规则的基本实施)。不依赖 根据这个任意命令来正确执行您的规则。