我有问题在drools中编写这个规则,将链接统一到相同的目的地,如果inveso也是后者的联合。
class Node {
List <Link> out;
List <Link> in;
}
class Link {
Source node;
Target node;
}
它们作为事实插入工作记忆中。
example.
A - link1 -> B
A - link2 -> B
A - link3 -> C
C - link4 -> D
B - link5 -> A
result
A - link1 + link2 +link5 -> B
A - link3 -> C
C - link4 -> D
任何人都可以帮助我吗?
答案 0 :(得分:0)
删除所有冗余的Link对象,并假设类Link被声明为
class Link {
Node source;
Node target;
}
(而不是原始帖子中给出的)规则:
rule "kill redundant links"
when
$l1: Link( $s: source, $t: target )
$l2: Link( this != $l1,
source == $s && target == $t
||
source == $t && target == $s )
$n1: Node( out contains $l2 )
$n2: Node( in contains $l2 )
then
retract( $l2 );
modify( $n1 ){ getOut().remove( $l2 ) }
modify( $n2 ){ getIn().remove( $l2 ) }
end
删除所有冗余链接事实并更新out
和in
字段
这些链接两端的Node
。