1

我在理解 RETE 算法 Beta 节点JoinNodenotNode时遇到问题?

在此处输入图像描述

文档说:

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

我理解,Alpha Node:drl 规则的各种文字条件,但上面的 BetaNodes 文档让我有点困惑。

下面说是上图的drl条件:

$person : Person( favouriteCheese == $cheddar )

查询:1) 与上述文档中解释的完全一样,两输入 Beta 节点的左右输入是什么?我相信它指的是我认为元组是事实的事实和规则?

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

2017 年 6 月更新的问题:

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

4

1 回答 1

0

对应于图表的条件将是

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

一旦有匹配,一个由匹配的 Cheese 和 Person 组成的新元组就组成了,如果条件中有第三个模式,它可以作为一个新的元组进行进一步的匹配。

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

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

于 2017-09-05T18:00:50.267 回答