[rules-users] unsolved myth regarding transitive closure using insertlogical...
Salaboy
salaboy at gmail.com
Sat Feb 19 08:17:07 EST 2011
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 <mproctor at codehaus.org> 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
>> rules-users at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
More information about the rules-users
mailing list