These predicates allow operating directly on the internal
representation of CLP(FD) domains. In this context, such an internal
domain representation is called an FD set.
Note that the exact term representation of FD sets is unspecified and
will vary across CLP(FD) implementations or even different versions of
the same implementation. FD set terms should be manipulated only
using the predicates in this section. The behavior of other operations
on FD set terms is undefined. In particular, you should not
construct or deconstruct FD sets by unification, and you cannot
reliably compare FD sets using unification or generic term
equality/comparison predicates.
- ?Var in_set +Set
- Var is an element of the FD set Set.
- [det]fd_set(?Var,
-Set)
- Set is the FD set representation of the current domain of Var.
- [semidet]is_fdset(@Set)
- Set is currently bound to a valid FD set.
- [det]empty_fdset(-Set)
- Set is the empty FD set.
- [semidet]fdset_parts(?Set,
?Min, ?Max, ?Rest)
- Set is a non-empty FD set representing the domain Min..Max
\/
Rest,
where Min..Max is a non-empty interval (see fdset_interval/3)
and Rest is another FD set (possibly empty).
If Max is sup, then Rest is the empty FD
set. Otherwise, if Rest is non-empty, all elements of Rest
are greater than Max+1.
This predicate should only be called with either Set or
all other arguments being ground.
- [semidet]empty_interval(+Min,
+Max)
- Min..Max is an empty interval. Min and Max
are integers or one of the atoms inf or sup.
- [semidet]fdset_interval(?Interval,
?Min, ?Max)
- Interval is a non-empty FD set consisting of the single
interval
Min..Max.
Min is an integer or the atom inf to denote negative
infinity.
Max is an integer or the atom sup to denote positive
infinity.
Either Interval or Min and Max must
be ground.
- [semidet]fdset_singleton(?Set,
?Elt)
- Set is the FD set containing the single integer Elt.
Either Set or Elt must be ground.
- [semidet]fdset_min(+Set,
-Min)
- Min is the lower bound (infimum) of the non-empty FD set Set.
Min is an integer or the atom inf if Set
has no lower bound.
- [semidet]fdset_max(+Set,
-Max)
- Max is the upper bound (supremum) of the non-empty FD set Set.
Max is an integer or the atom sup if Set
has no upper bound.
- [det]fdset_size(+Set,
-Size)
- Size is the number of elements of the FD set Set,
or the atom sup if Set is infinite.
- [det]list_to_fdset(+List,
-Set)
- Set is an FD set containing all elements of List,
which must be a list of integers.
- [det]fdset_to_list(+Set,
-List)
- List is a list containing all elements of the finite FD set Set,
in ascending order.
- [det]range_to_fdset(+Domain,
-Set)
- Set is an FD set equivalent to the domain Domain. Domain
uses the same syntax as accepted by (in)/2.
- [det]fdset_to_range(+Set,
-Domain)
- Domain is a domain equivalent to the FD set Set. Domain
is returned in the same format as by fd_dom/2.
- [det]fdset_add_element(+Set1,
+Elt, -Set2)
- Set2 is the same FD set as Set1, but with the
integer Elt added. If Elt is already in Set1,
the set is returned unchanged.
- [det]fdset_del_element(+Set1,
+Elt, -Set2)
- Set2 is the same FD set as Set1, but with the
integer Elt removed. If Elt is not in Set1,
the set returned unchanged.
- [semidet]fdset_disjoint(+Set1,
+Set2)
- The FD sets Set1 and Set2 have no elements in
common.
- [semidet]fdset_intersect(+Set1,
+Set2)
- The FD sets Set1 and Set2 have at least one
element in common.
- [det]fdset_intersection(+Set1,
+Set2, -Intersection)
- Intersection is an FD set (possibly empty) of all elements
that the FD sets Set1 and Set2 have in common.
- [nondet]fdset_member(?Elt,
+Set)
- The integer Elt is a member of the FD set Set. If Elt
is unbound,
Set must be finite and all elements are enumerated on
backtracking.
- [semidet]fdset_eq(+Set1,
+Set2)
- True if the FD sets Set1 and Set2 are equal, i. e.
contain exactly the same elements. This is not necessarily the same as
unification or a term equality check, because some FD sets have multiple
possible term representations.
- [semidet]fdset_subset(+Set1,
+Set2)
- The FD set Set1 is a (non-strict) subset of Set2,
i. e. every element of Set1 is also in Set2.
- [det]fdset_subtract(+Set1,
+Set2, -Difference)
- The FD set Difference is Set1 with all elements of Set2
removed, i. e. the set difference of Set1 and Set2.
- [det]fdset_union(+Set1,
+Set2, -Union)
- The FD set Union is the union of FD sets Set1 and Set2.
- [det]fdset_union(+Sets,
-Union)
- The FD set Union is the n-ary union of all FD sets in the
list Sets. If Sets is empty, Union is
the empty FD set.
- [det]fdset_complement(+Set,
-Complement)
- The FD set Complement is the complement of the FD set Set.
Equivalent to
fdset_subtract(inf..sup, Set, Complement)
.