Wit Jakuczun wrote: > Hi Kish, > the propagator looks like that (this is an example only): > > propagate(Var, OldDom, Susp) :- > propagate(Var), > ic:get_domain_as_list(Var, NewDom), > kill_suspension(Susp), > suspend( propagate(Var, NewDom, Susp1),3, Var->ic:hole, Susp1). > > Here the state is a domain of a variable. > > What is the better way to deal with such propagators? As Kish said, you add a State variable, and use setarg/3 on its arguments. For your example above this would be :- demon propagate/3. propagate(Var, State, Susp) :- State = state(OldDom), propagate(Var), ic:get_domain_as_list(Var, NewDom), setarg(1, State, NewDom). You can find examples of this in the library files ic_constraints.ecl or generic_global_constraints.ecl Btw, in 6.1 I intend to add set_suspension_arg/3 for this purpose. Cheers, JoachimReceived on Mon Feb 16 2009 - 00:17:09 CET
This archive was generated by hypermail 2.3.0 : Wed Sep 25 2024 - 15:13:20 CEST