Drools递归规则没有触发

时间:2012-06-28 02:24:55

标签: recursion drools

我拿了Fibanocci的例子并稍微修改了一下。它似乎仍然有效,但我不知道如何。这是我的规则。

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;
    }
}

1 个答案:

答案 0 :(得分:2)

这是一个简短的解释,为什么规则会像他们一样开火:

  • 对于任何匹配的工作记忆元素的组合,每个规则都会激发一次。
  • 第一场比赛由“斐波纳契 - 物体值== 0”生成,而“不存在斐波那契物体,序列== 0”
  • 对于此组合,规则不会再次触发直到
    • 修改并更新特定的Fibonacci-Object。
    • 出现序列== 0的Fibonacci-Object,然后消失(*)
  • 规则的结果会创建另一个值为== 0的Fibonacci-Object。这只会创建“斐波那契 - 对象值== 0”“不存在斐波那契 - 对象序列== 0”的一个匹配。 (“不存在”的事实没有改变。)

*)只有99%确定