Ulrich Scholz wrote: > Dear all, > > Id like to wake a suspension on an ic variables if it becomes more > constrained, in particular, if it gets unified with another ic variable > (#=). I thought, the "constrained" waking condition is the right way to > achieve this effect. But it does not seem to work in case no bound changes > occur. Maybe you can clarify. IC-variables have the 3 generic waking conditions (inst,bound,constrained) plus 4 specific ones (min,max,hole,type). Some of them include others: inst: wake on instantiation bound: inst + wake on var-var binding (see below) min: wake on lower bound change max: wake on upper bound change hole: wake on domain reduction without bound change type: wake when real is restricted to integer constrained: inst+bound+min+max+hole+type The one you want is 'bound' (the name is unfortunate, it refers to binding, not bounds!). What you have overlooked is that it reacts only to var-var bindings within the set of variables on which a particular goal delays. Bindings to unrelated variables don't trigger anything, which is exactly the behaviour you need: % unifying any two of the three suspending variables causes waking ?- suspend(writeln(reduced(X, Y, Z)), 0, [X,Y,Z]->bound), X = Y. reduced(X, X, Z) X = X Y = X Z = Z Yes (0.00s cpu) % unifying X with an unrelated variable has no effect ?- suspend(writeln(reduced(X, Y, Z)), 0, [X,Y,Z]->bound), X = A. X = A Y = Y Z = Z A = A There is 1 delayed goal. Yes (0.00s cpu) -- JoachimReceived on Mon Nov 16 2009 - 13:21:24 CET
This archive was generated by hypermail 2.3.0 : Wed Sep 25 2024 - 15:13:20 CEST