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    !