[rules-users] not sure if this is a bug of drools or my bad usage...
Wolfgang Laun
wolfgang.laun at gmail.com
Wed Mar 9 12:24:18 EST 2011
On 9 March 2011 04:59, Simon Chen <simonchennj at gmail.com> wrote:
> Hi Wolfgang,
>
> First, your rules work...
>
> But for the second rule, I replaced the first Reachable() in the when
> clause to Link(), and the result is still correct. Only if I remove
> "no-loop true", the issue I had appeared.
>
My statement about avoiding a mix of given and derived facts was
definitely exaggerating matters. But the representation of Link vs.
Reachable merits some consideration.
>
> So, I understand how "no-loop true" in this case helps to make the
> result correct. But, do you see any scenarios where "no-loop" can
> cause incorrect results? For example, not enough number of recursions?
>
No-loop is almost never satisfactory.
It's necessary to avoid duplications of Reachable. You can't add a "not" CE
to
block this, but it's possible to configure against the insertion of equal
facts.
For this, equals() and hashCode() must be implemented properly, and the
AssertBehaviorOption.EQUALITY must be set.
I have found this to work quite well:
public class Reachable {
private String src;
private String tgt;
//...
public boolean equals(Object obj) {
if (this == obj) return true;
if( ! (obj instanceof Reachable)) return false;
Reachable other = (Reachable) obj;
return other.src.equals( src ) && other.tgt.equals( tgt );
}
}
public class Link extends Reachable {
public Link( String src, String tgt ){
super(src, tgt);
}
}
Notice that this subclassing avoids the creation of Reachable for each Link.
And I still think that computing the closure should be done by using
Reachable only. Note the absence of no-loop!
rule deriveReachReach
when
Reachable( $src: src, $mid: tgt )
Reachable( src == $mid, $tgt: tgt != $src )
then
insertLogical( new Reachable( $src, $tgt ));
end
kbConfig.setOption( AssertBehaviorOption.EQUALITY ); // identical and
equal not inserted
kBase = KnowledgeBaseFactory.newKnowledgeBase( kbConfig );
Cheers
-W
>
> Thanks.
> -Simon
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20110309/881bc108/attachment.html
More information about the rules-users
mailing list