1 /* -*- Mode:Prolog; coding:ISO-8859-1; -*- */
2 :- module(csp_basic,[safe_less_than/2, safe_less_than_equal/2,
3 safe_less_than/3, safe_less_than_equal/3,
4 enumerate_csp_int/3]).
5
6 :- use_module(probsrc(module_information)).
7 :- module_info(group,csp).
8 :- module_info(description,'Basic operations on CSP values.').
9
10 :- use_module(probsrc(self_check)).
11 :- assert_must_succeed( (csp_basic:safe_less_than(X,Y), X=1,Y=2)).
12 :- assert_must_fail( (csp_basic:safe_less_than(X,Y), X=1,Y=1)).
13 :- assert_must_fail( (csp_basic:safe_less_than(X,Y), X=2,Y=1)).
14
15 :- block safe_less_than(-,?),safe_less_than(?,-).
16 safe_less_than(X,Y) :- X<Y.
17
18 :- assert_must_succeed( (csp_basic:safe_less_than(X,Y,R), X=1,Y=2,R==true)).
19 :- assert_must_succeed( (csp_basic:safe_less_than(X,Y,R), X=2,Y=2,R==false)).
20 :- block safe_less_than(-,?,?),safe_less_than(?,-,?).
21 safe_less_than(X,Y,R) :- (X<Y -> R=true ; R=false).
22
23 :- assert_must_succeed( (csp_basic:safe_less_than_equal(X,Y), X=1,Y=2)).
24 :- assert_must_succeed( (csp_basic:safe_less_than_equal(X,Y), X=1,Y=1)).
25 :- assert_must_fail( (csp_basic:safe_less_than_equal(X,Y), X=2,Y=1)).
26 :- block safe_less_than_equal(-,?),safe_less_than_equal(?,-).
27 safe_less_than_equal(X,Y) :- X=<Y.
28
29 :- assert_must_succeed( (csp_basic:safe_less_than_equal(X,Y,R), X=1,Y=2,R==true)).
30 :- assert_must_succeed( (csp_basic:safe_less_than_equal(X,Y,R), X=2,Y=2,R==true)).
31 :- assert_must_succeed( (csp_basic:safe_less_than_equal(X,Y,R), X=2,Y=1,R==false)).
32 :- block safe_less_than_equal(-,?,?),safe_less_than_equal(?,-,?).
33 safe_less_than_equal(X,Y,R) :- (X=<Y -> R=true ; R=false).
34
35 :- assert_must_succeed( (csp_basic:enumerate_csp_int(X,1,10), X==5)).
36 enumerate_csp_int(N,X,Y) :- X=<Y,
37 (N=X ; X1 is X+1, enumerate_csp_int(N,X1,Y)).