[ library(ic_sbds) | Reference Manual | Alphabetic Index ]

sbds_try(?Var, ++Val)

tries to assign a variable to a value
Var
SBDS Variable
Val
Value to try and assign to Value

Description

Called for each variable, value pair tried at a decision point during search.

Initally tries to assign a variable to a value, if this is succesful then it updates the symmetry functions to take account of any symmetries which have been broken by this assignment.

If this assignment is unsuccesful then it stipulates that the variable cannot be assigned to this value, before placing constraints to eliminate the symmetrical equivalent of this assgnment. If these symmetries are not already broken

Exceptions

(abort)
Var is not an sbds attributed variable

Examples

Replacement for labeling/1 which takes SBDS into account

sbds_labeling(AllVars) :-
( foreach(Var, AllVars) do
count_backtracks,
sbds_indomain(Var)
).

Replacement for indomain/1 which takes SBDS into account.

% value ordering is input order
sbds_indomain(X) :-
nonvar(X).
sbds_indomain(X) :-
var(X),
mindomain(X, LWB),
%sbds_try called here
sbds_try(X, LWB),
sbds_indomain(X).

See Also

sbds_initialise / 4, sbds_initialise / 5, ic : search / 6