报告JESS的推断

Reporting JESS's inference

我正在尝试报告 JESS 中的推理步骤。例如,我想知道哪个 rules/facts 导致推理引擎触发某个规则。换句话说,我想看看JESS的定理证明能力。 这是来自维基百科的示例:

(defrule A ""
   (and (X croaks) (X eats flies))
   =>
   (assert (X is a frog))
)

(defrule B ""
   (and (X chirps) (X sings))
   =>
   (assert (X is a canary))
)

(defrule C ""
   (X is a frog)
   =>
   (assert (X is green))
)

(defrule D ""
   (X is a canary)
   =>
   (assert (X is yellow))
)

如果我有以下情况:

(assert (X croaks))

(assert (X eats flies))

然后当我输入 (run) 时,我将 rule C 解雇。好像是因为

被解雇了
(X is a frog)

但实际上是因为

(and (X croaks) (X eats flies))

我不确定我是否清楚,但我想知道是否有任何方法可以说明为什么某些规则会被完整的推理过程触发。

您必须编写一些 Java 代码,以实现 jess.JessListener。您使用 Rete.addJessListener(jess.JessListener) 将此 class 的对象附加到 Rete 对象。您感兴趣的事件是 JessEvent.DEFRULE_FIRED,它将包含对激活对象的引用,并且可以从中获得规则。

请参阅 JessListener 的 Java 文档以获取一些 Java 代码。

您可以在 (run) 之前从 CLP 代码附加侦听器。