Arithmetic constraints are the most basic use of CLP(FD).
Every time you use (is)/2
or one of the low-level
arithmetic comparisons ((<)/2
, (>)/2
etc.) over integers, consider using CLP(FD) constraints instead.
This can at most increase the generality of your programs. See
declarative integer arithmetic (section
A.9.3).
(is)/2
and (=:=)/2
over integers. See declarative integer arithmetic (section
A.9.3).(=\=)/2
by #\=/2 to obtain more
general relations. See declarative integer arithmetic (section
A.9.3).#=<
X. When reasoning
over integers, replace (>=)/2
by
#>=/2 to obtain more
general relations. See declarative integer arithmetic (section
A.9.3).(=<)/2
by #=</2
to obtain more general relations. See declarative integer arithmetic (section
A.9.3).#<
X. When reasoning
over integers, replace (>)/2
by
#>/2 to obtain more
general relations See declarative integer arithmetic (section
A.9.3).(<)/2
by #</2
to obtain more general relations. See declarative integer arithmetic (section
A.9.3).
In addition to its regular use in tasks that require it, this constraint can also be useful to eliminate uninteresting symmetries from a problem. For example, all possible matches between pairs built from four players in total:
?- Vs = [A,B,C,D], Vs ins 1..4, all_different(Vs), A #< B, C #< D, A #< C, findall(pair(A,B)-pair(C,D), label(Vs), Ms). Ms = [ pair(1, 2)-pair(3, 4), pair(1, 3)-pair(2, 4), pair(1, 4)-pair(2, 3)].