I will take a look on those classes, sounds really interesting. - CTO @ http://www.plugtree.com - MyJourney @ http://salaboy.wordpress.com - Co-Founder @ http://www.jbug.com.ar - Mauricio "Salaboy" Salatino -
On 19/02/2011, at 05:24, Mark Proctor <[email protected]> wrote: > I think to impl this what is needed is a "logical" node. At the moment > the entire LHS forms the justification. But if we supported a logical > node, we could do this: > rule "reachDirect" > salience 10 > when > logical( e : Edge(s1 : source, t1 : target) ) > not( Reach(source == s1, target == t1) ) > then > insertLogical( new Reach(e.getSource(),e.getTarget()) ); > System.out.println( "Reach " + e.getSource() + "," + > e.getTarget() ); > end > > > That means that it would be inserted when there was no Reach, but it > would only be retracted when there was no matching Edge. The > justification is only for the part of the rule that is in the logical > grouping. > > To do this is actually quite a trivial change in drools, but it's not > something we do now. I think one reason why I held off was that i was > looking at Jess and Clips that have this and they state you can have > multiple logical elements. But i could't figure out how having 2 or 3 > would differ, compare to having just one. > > Anway to support a singe logical element, you'd need to update the > parser to support 'logical' conditional element, in the same format as > 'not' and 'exists'. Then if you look at RuleTerminalNode you'll see the > part of the code that is related to removing the justifications, on a > retract or modify - removeLogicalDependencies. Likewise if you look in > the DefaultKnowlegeHelper you'll see how the insertion works. That could > would instead be copied to the logical node. If a logical node exists > the RTN should have an if statement so the same code does not execute again. > > Any takers? > > Mark > > > On 19/02/2011 05:20, Simon Chen wrote: >> Hi all, >> >> I know this is kinda an old topic, but I just couldn't get it working. >> >> Here is a previous attempt using insertLogical() to handle transitive >> closure: >> http://drools-java-rules-engine.46999.n3.nabble.com/transitive-closure-td56855.html#a56858 >> The problem with this one is that the newly "logically inserted" object >> would violate its own "not exists" condition term, thus removing itself, >> then goes the infinite circle of insert/remove... >> >> Here is a post that deals with transitive closure using "insert", but it >> doesn't handle object removal correctly: >> http://drools-java-rules-engine.46999.n3.nabble.com/one-question-about-Transitive-Closure-td57289.html >> >> >> To me, using insertLogical is attractive because it doesn't require me to >> write specific rules to handle object removal. Is there a trick that I can >> use to actually implement transitive closure with insertLogical? >> >> Thanks a lot! >> -Simon >> _______________________________________________ >> rules-users mailing list >> [email protected] >> https://lists.jboss.org/mailman/listinfo/rules-users >> >> > > > _______________________________________________ > rules-users mailing list > [email protected] > https://lists.jboss.org/mailman/listinfo/rules-users _______________________________________________ rules-users mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-users
