1:- module(cdqr, []). 2
3:- use_module(library(arithmetic)). 4:- use_module(library(neck)). 5:- use_module(library(clpcd/domain_ops)). 6:- use_module(library(clpcd/nf)). 7:- use_module(library(clpcd/inv)). 8:- use_module(library(arithex)). 9:- init_expansors. 10
11:- meta_predicate clpcd_domain_ops:eval_d(+,+,?). 12
13:- public cdqr/1. 14
15cdqr(cdq).
16cdqr(cdr).
17
18clpcd_nf:nl_invertible(C,F) :-
19 cdqr(C),
20 neck,
21 cd_invertible(F).
22
23clpcd_nf:nl_invert(C,F,X,Y,Res) :-
24 cdqr(C),
25 neck,
26 cd_invert(F,C,X,Y,N),
27 cast_d(C,N,Res).
28
29:- public cdqr_text/2. 30
31cdqr_text(cdq, 'a rational number').
32cdqr_text(cdr, 'a real number').
33
34clpcd_domain_ops:numbers_only(C,Y) :-
35 cdqr_text(C, Txt),
36 neck,
37 ( var(Y)
38 ; number(Y)
39 ; throw(type_error(_X = Y, 2, Txt, Y))
40 ),
41 !