Node:Unification, Next:Feedback, Previous:Solver Predicates, Up:CLPQR Interface

Equality constraints are added to the store implicitly each time
variables that have been mentioned in explicit constraints are
bound--either to another such variable or to a number.

clp(r) ?-Is equivalent modulo rounding errors to{2*A+3*B=C/2}, C=10.0, A=B.A = 1.0, B = 1.0, C = 10.0

clp(r) ?-The shortcut bypassing the use of{2*A+3*B=C/2, C=10, A=B}.A = 1.0, B = 0.9999999999999999, C = 10.0

`{}/1`

is allowed and makes
sense because the interpretation of this equality in Prolog and clp(R)
coincides. In general, equations involving interpreted functors,
`+/2`

in this case, must be fed to the solver explicitly:
clp(r) ?-X=3.0+1.0, X=4.0.no

Further, variables known by clp(R) may be bound directly to
floats only. Likewise, variables known by clp(Q) may be
bound directly to rational numbers only;
see Rationals. Failing to do so is rewarded with an exception:

clp(q) ?-{2*A+3*B=C/2}, C=10.0, A=B.! Type error in argument 2 of = /2 ! 'a rational number' expected, but 10.0 found ! goal: _254=10.0

This is because `10.0`

is not a rational constant. To make clp(Q) happy
you have to say:

clp(q) ?-{2*A+3*B=C/2}, C=rat(10,1), A=B.A = 1, B = 1, C = 10

If you use `{}/1`

, you don't have to worry about such details.
Alternatively, you may use the automatic expansion facility, check Syntactic Sugar.