Author: Leslie De Koninck, K.U. Leuven as part of a thesis with supervisor Bart Demoen and daily advisor Tom Schrijvers.
This CLP(R) system is a port of the CLP(Q,R) system of Sicstus Prolog by Christian Holzbaur: Holzbaur C.: OFAI clp(q,r) Manual, Edition 1.3.3, Austrian Research Institute for Artificial Intelligence, Vienna, TR-95-09, 1995. (84) This port only contains the part concerning real arithmetics. This manual is roughly based on the manual of the above mentioned CLP(QR) implementation.
Please note that the library(clpr)
library is not
an
autoload library and therefore this library must be loaded
explicitely before using it:
:- use_module(library(clpr)). |
dump([X,Y,Z],[x,y,z],Cons) |
Cons will contain the constraints on X, Y and Z where these variables have been replaced by atoms x, y and z.
<Constraints> | ::= | <Constraint> | single constraint |
| | <Constraint> , <Constraints> | conjunction | |
| | <Constraint> ; <Constraints> | disjunction | |
<Constraint> | ::= | <Expression> < <Expression> | less than |
| | <Expression> > <Expression> | greater than | |
| | <Expression> =< <Expression> | less or equal | |
| | <= (<Expression>, <Expression>) | less or equal | |
| | <Expression> >= <Expression> | greater or equal | |
| | <Expression> =\= <Expression> | not equal | |
| | <Expression> =:= <Expression> | equal | |
| | <Expression> = <Expression> | equal | |
<Expression> | ::= | <Variable> | Prolog variable |
| | <Number> | Prolog number (float, integer) | |
| | +<Expression> | unary plus | |
| | -<Expression> | unary minus | |
| | <Expression> + <Expression> | addition | |
| | <Expression> - <Expression> | substraction | |
| | <Expression> * <Expression> | multiplication | |
| | <Expression> / <Expression> | division | |
| | abs(<Expression>) | absolute value | |
| | sin(<Expression>) | sine | |
| | cos(<Expression>) | cosine | |
| | tan(<Expression>) | tangent | |
| | exp(<Expression>) | exponent | |
| | pow(<Expression>) | exponent | |
| | <Expression> ^ <Expression> | exponent | |
| | min(<Expression>, <Expression>) | minimum | |
| | max(<Expression>, <Expression>) | maximum |
Table 9 : CLP(R) constraint BNF |
Instead of using the {}/1 predicate, you can also use the standard unification mechanism to store constraints. The following code samples are equivalent:
{X =:= Y} {X = Y} X = Y |
{X =:= 5.0} {X = 5.0} X = 5.0 |
A = B * C | B or C is ground | A = 5 * C or A = B * 4 |
A and (B or C) are ground | 20 = 5 * C or 20 = B * 4 | |
A = B / C | C is ground | A = B / 3 |
A and B are ground | 4 = 12 / C | |
X = min(Y,Z) | Y and Z are ground | X = min(4,3) |
X = max(Y,Z) | Y and Z are ground | X = max(4,3) |
X = abs(Y) | Y is ground | X = abs(-7) |
X = pow(Y,Z) | X and Y are ground | 8
= 2 ^ Z |
X = exp(Y,Z) | X and Z are ground | 8
= Y ^ 3 |
X = Y ^ Z | Y and Z are ground | X = 2 ^ 3 |
X = sin(Y) | X is ground | 1 = sin(Y) |
X = cos(Y) | Y is ground | X = sin(1.5707) |
X = tan(Y) |
Table 10 : CLP(R) isolating axioms |