/* * Inequality constraint solver in HyperLMNtal(hyperlmn) * Author: Seiji OGAWA, 2011-03-31 * * Examples are taken from: * http://dtai.cs.kuleuven.be/CHR/examples.shtml * * If you'd like to change parameter N, * please change the 1st argument of i("N", 0). * */ { refl@@ leq($x,$x) :- . anti@@ leq($x,$y), leq($y,$x) :- $x><$y. idem@@ leq($x,$y) \ leq($x,$y) :- . tran@@ leq(X,$y), leq($y,Z) \ :- uniq(X,Z) | leq(X,Z). { i(10, 0). list = []. i(M, I), list = H :- M > I, I1 = I+1, new($x) | i(M, I1), list = [$x|H]. i(M1,M2), list = [X,Y|R] :- M1 =:= M2, hlink(X) | l(X, [X,Y|R]). l(H, [X,Y|R]) :- hlink(Y) | l(H, [Y|R]), leq(X, Y). l(X, [Y]) :- leq(Y, X). }. {$p, @p}/ :- $p, '$callback'(gettime, start). }. {start(S), $p[], @p}/ :- float(S) | start(S), '$callback'(gettime, end). end(E), start(S) :- T = E-.S | time(T).