提问者:小点点

Drools retes算法混乱


我有一个问题,了解rete算法Beta节点JoinNode和not Node?

文档说:

有两个双输入节点,JoinNode和NotNode,它们都是BetaNodes的类型。BetaNodes用于比较2个对象及其字段。对象可能是相同或不同的类型。按照惯例,我们将两个输入称为左和右。BetaNode的左输入通常是对象列表;在Drools中,这是一个元组。右输入是单个对象。两个节点可用于实现“存在”检查。BetaNodes也有内存。左输入称为Beta Memory并记住所有传入的元组。右输入称为Alpha Memory并记住所有传入的对象。

我明白了,阿尔法节点:drl规则的各种文字条件,但上面的BetaNodes留档让我有点困惑。

下面是上图的drl条件:

$人:人(最喜欢的奶酪==$切达干酪)

查询:1)两个输入Beta节点的左和右输入是什么,正如上面留档所解释的那样?我相信它指的是我相信元组是事实的事实和规则?

2)notNode基本上是drl条件匹配文字条件与not?

6月17日更新问题:

3)我相信上面的图代表joinNode,如果上面的工作流程被改变以适应not Node,如何表示not Node?


共1个答案

匿名用户

对应于图表的条件将是

Cheese( $name: name == "Cheddar" )
Person( favouriteCheese == $name )

一旦有匹配,就会组成一个由匹配的Cheese和Person组成的新元组,并且如果条件中存在第三种模式,则可以作为进一步匹配的新元组。

非节点是断言某个事实不存在的节点。它只会触发一次。

你可能会在网上找到更好的“rete”描述。