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

# exclude(?Var, ++Excl)

Exclude the element Excl from the domain of Var.

Var
  (Domain) variable or integer
Excl
  Integer value to exclude

## Description

This predicate is mainly provided for compatibility with IC solver. If you want to remove multiple values from the domain of one or more variables, it is more efficient to use the lib(gfd) specific gfd_vars_exclude/2.

Primitive for excluding an element from the domain of a variable. The call may fail (when Var is the same integer as Excl), succeed (possibly updating the variable's domain), or instantiate the variable (when Excl was one of only two domain elements left).

Note that this predicate is intended for use only in implementing co-operation with other solvers and constraint propagators at the ECLiPSe level, and should not be called from ordinary user code. It differs from the usual constraint in that the propagation is not performed immediately. Normally, propagation in gecode is performed by a suspended goal that is scheduled and woken after each constraint is posted. However, exclude/2 does not call the woken goal scheduler (wake/0), so the propagation goal may not be executed immediately. (It is possible that under some circumstances the goal will be executed, if wake/0 is called indirectly - one example would be by the unify handler if the variable becomes ground - but this should not be relied upon.) To ensure that the goals are eventually executed, the caller should arrange for wake/0 to be called at some appropriate point in the subsequent execution. Please see the "Advanced Control Features" section of the User Manual for more information about woken goal management.

## See Also

exclude_range / 3, impose_min / 2, impose_max / 2, impose_domain / 2