我尝试使用Drools反向链接来找出需要哪些事实才能将对象插入到工作内存中。在下面的示例中,我希望得到事实“go2”。
rule "ins a"
when
String( this == "go2" )
then
insert(new A());
end
rule "Run"
when
then
insert(new String("go1"));
end
rule "Test isThereAnyA"
when
String( this == "go1" )
isThereAnyA(a;)
then
System.out.println( "you can get " + a );
end
query isThereAnyA (A a)
a := A()
end
我一直在看官方文件中的例子http://docs.jboss.org/drools/release/6.1.0.Final/drools-docs/html_single/index.html#d0e21289但它们显示了不同的情况(这些示例中的规则不会产生新的事实)
从图表中http://docs.jboss.org/drools/release/6.1.0.Final/drools-docs/html_single/index.html#d0e21240我认为它应该可以工作,但我还没有找到一种方法来指定一个能够提供预期结果的查询。
提前谢谢你。
简短的回答:
不幸的是,反向链接不能用于此目的。在这种情况下,它不会给你“go2”。
详细回答:
在Drools中,反向链接(BC)是一种以目标驱动的方式查询WM的方法,而不是一种追溯正常正向链接推理过程的派生图的方法。
BC允许规则“Test”通过查询“isThereAnyA”检索As,并可能调用其他查询,但不允许查找“A”和“go2”之间的“production”链接。原因是“when..then..insert..”不会在触发事实和断言结论之间创建任何链接,反向链接不会改变它。
你可以用BC做的是:
query isThereAnyA_InPresenceOfA_String( A a )
isThereAnyString( $s ; )
a := A()
end
query isThereAnyString( String $s )
$s := String( this == "go2" )
end
只有当字符串“go2”(仍然)存在时,才会出现这种情况。但是,您会注意到,a的特定实例与导致其断言的特定字符串之间的连接仍然缺失。
要确切地知道哪些对象导致了另一个对象的断言,您可能需要一种不同的方法。选项包括:
基于TMS的是我的初步选择,但这也取决于您的确切要求。
这个用例很常见,可能还有其他选项,包括一些在6.3中开发的实验性选项,但我宁愿先问几个问题。那就是:你什么时候需要确切地发现事实——在规则执行期间,还是“离线”?这纯粹是为了审计目的,还是会影响你的业务html" target="_blank">逻辑?你可以有多个规则来断言“同一个”对象吗?
希望这对Davide有帮助
为什么我会得到不满意的链接错误? 细节如下: 本机方法的原型及其在我的Java代码中的调用是这样的: 私有本机long sampleFunction(long[][]twoDimArray,long number); p.SampleFunction(twoDimArray,number); 本机方法在VC++代码中的原型是这样的: JNIEXPORT jlong JNICALL Java_MyC
我是一名学生,正在为我的学校项目开发OCR功能。到目前为止,我能够成功地实现这些功能并运行应用程序。 我在Android Studio1.5.1上有我的应用程序,并且能够在我的旧设备三星银河笔记3应用编程接口21上运行它。最近,我将我的设备更改为三星银河笔记5应用编程接口22,每当我试图运行光学字符识别功能时,应用程序就会崩溃。 以下是日志: 致命异常:java。lang.IllegalState
我正在尝试反转一个链表,我为此编写了代码。但是,当我在反转后打印列表时,输出有点不完整。 产量:120 110 100
我真的很难修复我的代码。我已经创建了一个双链接列表,我正试图反向遍历它。 有什么想法吗? 这是我的代码:Node。爪哇: 下面是第二个类“DNode.java”: 最后,这里是双链接列表。java:(重写另一个类“链表”中的“添加”和“删除”方法) 公共类双链接列表扩展了链接列表{ 我可以向前打印列表,但向后打印时会遇到无限循环。有什么想法吗? 谢谢
问题内容: 如何创建一个链接到? 假设已在下方建立,而您目前在中。当您这样做时,您将直接转到。 问题答案: 符号或软链接(文件或目录,更灵活,可自我记录) 硬链接(仅文件,灵活性较差且无法自我记录) 详细信息:man ln 就像一个新目录。要避免出现 “不是目录:没有这样的文件或目录” 错误,例如@trlkly注释,请在目标中使用相对路径,即使用示例:
我试图打印一个双链接列表,从tail元素开始,以first元素结束。我下面的代码就是这样做的,但出于某种原因,我也返回了被删除的项目。当我从头到尾打印列表时,它不会这样做。Idk,如果是toString导致了这个或dequed方法。我把两者都包括在内。