- library
- clp
- clpfd.pl -- CLP(FD): Constraint Logic Programming over Finite Domains
- in/2
 - ins/2
 - indomain/1
 - label/1
 - labeling/2
 - all_different/1
 - all_distinct/1
 - sum/3
 - scalar_product/4
 - #>=/2
 - #=</2
 - #=/2
 - #\=/2
 - #>/2
 - #</2
 - #\/1
 - #<==>/2
 - #==>/2
 - #<==/2
 - #/\/2
 - #\//2
 - #\/2
 - lex_chain/1
 - tuples_in/2
 - serialized/2
 - element/3
 - global_cardinality/2
 - global_cardinality/3
 - circuit/1
 - cumulative/1
 - cumulative/2
 - disjoint2/1
 - automaton/3
 - automaton/8
 - transpose/2
 - zcompare/3
 - chain/2
 - fd_var/1
 - fd_inf/2
 - fd_sup/2
 - fd_size/2
 - fd_dom/2
 
 - clpb.pl -- CLP(B): Constraint Logic Programming over Boolean Variables
 
 - clpfd.pl -- CLP(FD): Constraint Logic Programming over Finite Domains
 
 - clp
 
- fd_dom(+Var, -Dom)
 - Dom is the current domain (see in/2) of Var. This predicate is
useful if you want to reason about domains. It is not needed if
you only want to display remaining domains; instead, separate your
model from the search part and let the toplevel display this
information via residual goals.
For example, to implement a custom labeling strategy, you may need to inspect the current domain of a finite domain variable. With the following code, you can convert a finite domain to a list of integers:
dom_integers(D, Is) :- phrase(dom_integers_(D), Is). dom_integers_(I) --> { integer(I) }, [I]. dom_integers_(L..U) --> { numlist(L, U, Is) }, Is. dom_integers_(D1\/D2) --> dom_integers_(D1), dom_integers_(D2).Example:
?- X in 1..5, X #\= 4, fd_dom(X, D), dom_integers(D, Is). D = 1..3\/5, Is = [1,2,3,5], X in 1..3\/5.