Next: FD Set Operations, Previous: The Global Constraint Programming Interface, Up: Defining Global Constraints [Contents][Index]

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.`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.`Max`is unified with the upper bound of the current domain of`X`, i.e. an integer or the atom`sup`

denoting plus infinity. `fd_size(`

`?X`,`?Size`)-
where

`X`is a domain variable.`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.`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.`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.`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 other variables, domain or otherwise, that occur with`Var`in some constraint. `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. Thus,`fd_closure/2`

is the transitive closure of`fd_neighbors/2`

.

Send feedback on this subject.