[rules-dev] Slot Specific and Refraction

Wolfgang Laun wolfgang.laun at gmail.com
Thu Aug 5 04:27:00 EDT 2010


I suppose that the proposed refraction (with onChange as control mechanism)
is based on "fine-grained" WM updates - the question is, how fine the grain
is.
This is important for determining whether a rule will fire again, due to
the LHS becoming false and then true again.

(These are contrived, but simple, examples.)

rule "insert-retract"
when
   $a : Elem()
   $b : Elem( this != $a )
then
   retract( $a );
   // now LHS is false
   insert( $a );
   // now LHS true again
end

rule "increment-both-facts"
when
   $a : Elem( $slot : slot )
   $b : Elem( slot == $slot, this != $a )
then
   modify( $a ){
       setSlot( $a.getSlot() +  1 )
   }
    // now LHS is false
   modify( $b ){
       setSlot( $b.getSlot() +  1 )
   }
    // now LHS is true again
end

rule "increment-both-slots"
when
   $a : Elem( $slot1 : slot1, slot2 == slot1 )
then
  modify( $a ){
       setSlot1( $a.getSlot1() +  1 ),
       // now LHS is false
       setSlot2( $a.getSlot2() +  1 )
       // now LHS is false
   }
end

I'm guessing that "insert-retract" and "increment-both-facts" will loop
even with the proposed change. I'm not quite so sure about the fate
of "increment-both-slots", but I'd bet my money on "loop" here, too.

But won't a "naive" interpretation of the refraction as proposed
lead to the assumption that none of these three rules will loop?

Anyway, a precise definition of when and how the true-false and
false-true transitions may occur will be essential.

=*=

Another question arises in combination with "virtual" fields.

class Board { // a square board
   int dim;
   int getDim(){ return dim; }
   void setDim( int dim ){ this.tim = dim; }
   int getFields(){ return dim*dim; }
}

rule "enlarge-board"
when
    Limit( value )
    $b : Board( onChange == [fields], fields < value )
then
   modify( $b ){
      setDim( $b.getDim() + 1 )
  }
end

I suppose this will not loop (until Limit.value is reached), but
I (being naive!) did say onChange == [fields].

-W

On 31 July 2010 20:53, Mark Proctor <mproctor at codehaus.org> wrote:

>  http://blog.athico.com/2010/07/slot-specific-and-refraction.html
>
> _______________________________________________
> rules-dev mailing list
> rules-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-dev/attachments/20100805/49d7add1/attachment.html 


More information about the rules-dev mailing list