Next: , Previous: The Global Constraint Programming Interface, Up: Defining Global Constraints


10.10.9.2 Reflection Predicates

The constraint solving method needs access to information about the current domains of variables. This is provided by the following predicates, which are all constant time operations.

fd_var(?X)
Checks that X is currently an unbound variable that is known to the CLPFD solver.
fd_min(?X, ?Min)
where X is a domain variable (or an integer). Min is unified with the smallest value in the current domain of X, i.e. an integer or the atom inf denoting minus infinity.
fd_max(?X, ?Max)
where X is a domain variable (or an integer). Max is unified with the upper bound of the current domain of X, i.e. an integer or the atom sup denoting infinity.
fd_size(?X, ?Size)
where X is a domain variable (or an integer). Size is unified with the size of the current domain of X, if the domain is bounded, or the atom sup otherwise.
fd_set(?X, ?Set)
where X is a domain variable (or an integer). Set is unified with an FD set denoting the internal representation of the current domain of X; see below.
fd_dom(?X, ?Range)
where X is a domain variable (or an integer). Range is unified with a ConstantRange (see Syntax of Indexicals) denoting the current domain of X.
fd_degree(?X, ?Degree)
where X is a domain variable (or an integer). Degree is unified with the number of constraints that are attached to X.
Please note: this number may include some constraints that have been detected as entailed. Also, Degree is not the number of neighbors of X in the constraint network.

The following predicates can be used for computing the set of variables that are (transitively) connected via constraints to some given variable(s).

fd_neighbors(+Var, -Neighbors)
Given a domain variable Var, Neighbors is the set of variables that can be reached from Var via constraints posted so far.
fd_closure(+Vars, -Closure)
Given a list Vars of domain variables, Closure is the set of variables (including Vars) that can be transitively reached via constraints posted so far. Thus, fd_closure/2 is the transitive closure of fd_neighbors/2.

Send feedback on this subject.