Recursion 不触发递归规则
我以斐巴诺契为例,对它做了一点修改。它似乎仍然有效,但我不知道如何。这是我的规则Recursion 不触发递归规则,recursion,drools,Recursion,Drools,我以斐巴诺契为例,对它做了一点修改。它似乎仍然有效,但我不知道如何。这是我的规则 rule "Recurse" salience 10 when f : Fibanocci(value == 0) not Fibanocci(sequence == 0) then System.out.println(f.sequence + "/" + f.value); insert(new Fibanocci(f.sequence -
rule "Recurse"
salience 10
when
f : Fibanocci(value == 0)
not Fibanocci(sequence == 0)
then
System.out.println(f.sequence + "/" + f.value);
insert(new Fibanocci(f.sequence - 1));
end
我得到以下输出:
50/0
49/0
48/0
47/0
46/0
45/0
.. 等等
在我看来,每次插入新的Fibanocci
实例时,它都应该从50开始,但事实并非如此
// here is my class, getter/setter skipped
public class Fibonacci {
private int sequence;
private long value;
public Fibonacci(final int sequence) {
this.sequence = sequence;
}
}
下面是一个简短的解释,为什么这些规则会像它们一样火:
- 对于匹配的工作内存元素的任何组合,每个规则只触发一次
- 第一个匹配由“值==0的Fibonacci对象”和“序列==0的Fibonacci对象不存在”生成李>
- 对于此组合,规则将在
- 修改并更新特定的斐波那契对象
- 出现序列==0的斐波那契对象,然后消失(*)
- 该规则的结果将创建另一个Fibonacci对象,其值==0。这只会创建“值==0的Fibonacci对象”和“序列==0的Fibonacci对象不存在”的另一个匹配项。(不存在的事实没有改变。)