联盟链接规则

时间:2014-06-04 08:23:41

标签: drools rule

我有问题在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

任何人都可以帮助我吗?

1 个答案:

答案 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

删除所有冗余链接事实并更新outin字段 这些链接两端的Node