- 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
- tuples_in(+Tuples, +Relation)
- True iff all Tuples are elements of Relation. Each element of the
list Tuples is a list of integers or finite domain variables.
Relation is a list of lists of integers. Arbitrary finite relations,
such as compatibility tables, can be modeled in this way. For
example, if 1 is compatible with 2 and 5, and 4 is compatible with 0
and 3:
?- tuples_in([[X,Y]], [[1,2],[1,5],[4,0],[4,3]]), X = 4. X = 4, Y in 0\/3.
As another example, consider a train schedule represented as a list of quadruples, denoting departure and arrival places and times for each train. In the following program, Ps is a feasible journey of length 3 from A to D via trains that are part of the given schedule.
trains([[1,2,0,1], [2,3,4,5], [2,3,0,1], [3,4,5,6], [3,4,2,3], [3,4,8,9]]). threepath(A, D, Ps) :- Ps = [[A,B,_T0,T1],[B,C,T2,T3],[C,D,T4,_T5]], T2 #> T1, T4 #> T3, trains(Ts), tuples_in(Ps, Ts).
In this example, the unique solution is found without labeling:
?- threepath(1, 4, Ps). Ps = [[1, 2, 0, 1], [2, 3, 4, 5], [3, 4, 8, 9]].