Thank you. Accumulating increasingly on every step seems better then doing 'accumulate' on all objects, all the time. Logically, it is the same as what I wanted - to accumulate the total size somewhere. Implementation-wise, the difference is the additional fact object for accumulation.
Should I avoid using static or any non-fact external data as part of my calculations? Isnt it just like using globals? 2009/8/8 Wolfgang Laun <[email protected]>: > As an alternative, consider asserting a single Fact Shelf with field x > initially 0. Then you could do > > rule "Another box on the shelf" > when > b: Box( x == -1, $size : size ) > s: Shelf( $x : x ) > then > b.setX( $x ); update( b ); > s.setX( $x + $size ); update( s ); > end > > -W > > > 2009/8/8 Greg Barton <[email protected]> >> >> You answer your own question. Use accumulate: >> >> rule "Hello World" >> when >> b : Box( x == -1 ) >> newX : Integer() from accumulate( box: Box( x != -1 ), >> init( int i = 0; ), >> action( i += box.size; ), >> reverse( i -= box.size; ), >> result( i ) ) >> then >> System.out.println("Sum: " + newX); >> b.setX(newX); >> System.out.println(b); >> update(b); >> end >> >> See attached project. >> >> --- On Sat, 8/8/09, sonia <[email protected]> wrote: >> >> > From: sonia <[email protected]> >> > Subject: Re: [rules-users] Strategy for initializing objects >> > To: "Rules Users List" <[email protected]> >> > Date: Saturday, August 8, 2009, 2:36 AM >> > In general: I want to set a property >> > in the Box objects, depending on >> > all previously set objects.. >> > >> > My goal is to place the boxes one after another, for this I >> > keep a >> > variable in Box object. >> > It seems like the easiest way to accumulate the sizes of >> > boxes that >> > are already placed. >> > >> > In the 'then' clause, I set the box location, and update >> > the X by >> > adding the size of the currently placed box. >> > >> > 2009/8/8 Wolfgang Laun <[email protected]>: >> > > Your goal and the presented code aren't clear to me. >> > The consequence (after >> > > then) contains calls to static/class methods >> > (Box.setX()) which isn't going >> > > to change anything in your fact object. The call >> > b.setX() might change your >> > > object, but this depends on what the class method >> > Box.getX() returns. >> > > >> > > Assuming Drools 5, a typical consequence would look >> > like >> > > b: Box(...) >> > > then >> > > modify( b ){ >> > > setX( ... ) >> > > } >> > > end >> > > >> > > -W >> > > >> > > On Sat, Aug 8, 2009 at 1:48 AM, sonia <[email protected]> >> > wrote: >> > >> >> > >> Hello >> > >> >> > >> I want to achieve this: >> > >> box1.setX(0) >> > >> box2.setX(box1.size()); >> > >> box2.setX(box1.size + box2.size) >> > >> ... >> > >> >> > >> I want to do it with rules, and would like to know >> > what's the best >> > >> method of initializing (or any other operation >> > with varying data) a >> > >> group of objects >> > >> >> > >> rule "init box" >> > >> when >> > >> b : Box( x == -1) >> > >> then >> > >> b.setX(Box.getX()); >> > >> Box.setX( Box.getX() + b.size); >> > >> end >> > >> >> > >> This does not work. >> > >> A single box object is matched several times >> > instead of different box >> > >> objects. >> > >> What is happening? how come a single box object is >> > matched several >> > >> times? Why doesnt drools choose other instances of >> > box? >> > >> >> > >> What do I need to do to initialize all boxes, once >> > for every box? >> > >> >> > >> Thank you. >> > >> >> > >> -- >> > >> robosonia >> > >> _______________________________________________ >> > >> 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 >> > > >> > > >> > >> > >> > >> > -- >> > robosonia >> > >> > _______________________________________________ >> > 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 > > -- robosonia _______________________________________________ rules-users mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-users
