Java Drools eval()优化

Java Drools eval()优化,java,drools,rule-engine,kie,Java,Drools,Rule Engine,Kie,在这里提到的这个文档()中,没有为when子句中使用的eval()方法提供优化细节。假设callMethod将输入字符打印到日志中,然后盲目地返回false rule "Rule1" when eval( callMethod('r') ) then .. drools.halt(); end rule "Rule2" when eval( callMethod('r') ) then .. drools.halt(); end rule "Rule3"

在这里提到的这个文档()中,没有为when子句中使用的eval()方法提供优化细节。假设callMethod将输入字符打印到日志中,然后盲目地返回false

rule "Rule1"
when
    eval( callMethod('r') )
then

 ..
 drools.halt();

end

rule "Rule2"

when
    eval( callMethod('r') )
then

 ..
 drools.halt();

end

rule "Rule3"

when
    eval( callMethod('r') )
then

 ..
 drools.halt();
end

rule "Rule4"

when
    eval( callMethod('r') &&
          callMethod('x')
    )
then

 ..
 drools.halt();
end

rule "Rule5"
when
    eval(callMethod('x')
    )
then
 ..
 drools.halt();
end
为什么引擎正在打印:

r //probably from rule 1
r //Rule 4
x //Rule 4 again
而不是

r
r
r
r
x
x

drools在这里使用的优化技术是什么?这有点令人困惑。

查尔斯·L·福吉博士在1979年开发的Rete算法的基本思想是从产生式规则左侧的组件中提取逻辑表达式网络

其结果是,相同表达式的计算不能再与规则代码中的文本外观相关联


详细信息不能用这种格式解释。Google和research.

Charles L.Forgy博士在1979年开发的Rete算法的基本思想是从产生式规则左侧的组件中提取逻辑表达式网络

其结果是,相同表达式的计算不能再与规则代码中的文本外观相关联


详细信息不能用这种格式解释。谷歌和研究。

甚至r,r,x,x:如果我假设它缓存了以前类似的评估结果?或者甚至r,r,x,x:如果我假设它缓存了以前类似的评估结果?