我正在尝试报告JESS中的推理步骤。例如,我想知道哪些规则/事实导致推理引擎触发某个规则。简而言之,我想看看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对象Rete.addJessListener(jess.JessListener)
。您感兴趣的事件是JessEvent.DEFRULE_FIRED
,它将包含对激活对象的引用,并且可以从中获得规则。
有关某些Java代码,请参见Javadoc for JessListener。
您可以在之前从CLP代码附加侦听器(run)
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句