Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
报告JESS';s推断_Jess - Fatal编程技术网

报告JESS';s推断

报告JESS';s推断,jess,Jess,我想报告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)) ) (de

我想报告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)
时,我将触发
规则C
。看起来,它被解雇是因为

(X is a frog)
(and (X croaks) (X eats flies))
但实际上是因为

(X is a frog)
(and (X croaks) (X eats flies))

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

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

有关一些Java代码,请参阅JavadocforJessListener


(run)

之前,您可以从CLP代码附加侦听器。您在实际的Jess代码中有这个吗?你如何确定一条规则被激活?不,它不在我的实际代码中。对于上面的示例,您可以通过
(facts)
打印出事实,并看到由于执行相关规则而添加了新的事实。这是一个非常有用的答案,但它仍然给出了我要查找的确切内容。现在,我能够看到哪些直接事实实际上导致了规则的激活。那么,我怎样才能知道,或者说我真的能知道,所有的推理过程是什么呢?基本上,我需要一个反向链接机制来证明一个定理。JESS允许吗?好吧,如果它给了你想要的东西,那么你就有了问题的答案。如果不是的话,你问错问题了。对不起,我的意思是它仍然没有给出我想要的东西。因此,我在上面的评论中提出的问题仍然有效。@Lorderon——您也可以通过简单地跟踪时间上的事件来获得前向链接所需的内容。使用其他事件,您可以确定哪个规则在其RHS上断言了一个事实,因此您可以保留激活了哪些事实的数据库,哪个规则断言了哪些事实,等等。您需要的所有信息都可以使用
JessListener
@Lorderon yes,规则触发事件中的对象是包含实际事实对象的激活记录。