10.34.8.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 term 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 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.