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 cdqr_eval_d(+,?).   12
   13cdqr_eval_d(F, R) :-
   14    arithmetic_expression_value(F, R).
   15
   16/*
   17cdqr_eval_d(F, R) :-
   18    num_arithmetic_function(F),
   19    neck,
   20    R is F.
   21*/
   22
   23:- public cdqr/1.   24
   25cdqr(cdq).
   26cdqr(cdr).
   27
   28clpcd_domain_ops:eval_d(C, F, R) :-
   29    cdqr(C),
   30    neck,
   31    cdqr_eval_d(F, R).
   32
   33clpcd_nf:nl_invertible(C,F) :-
   34    cdqr(C),
   35    neck,
   36    cd_invertible(F).
   37
   38clpcd_nf:nl_invert(C,F,X,Y,Res) :-
   39    cdqr(C),
   40    neck,
   41    cd_invert(F,C,X,Y,N),
   42    cast_d(C,N,Res).
   43
   44:- public cdqr_text/2.   45
   46cdqr_text(cdq, 'a rational number').
   47cdqr_text(cdr, 'a real number').
   48
   49clpcd_domain_ops:numbers_only(C,Y) :-
   50    cdqr_text(C, Txt),
   51    neck,
   52    (   var(Y)
   53    ;   number(Y)
   54    ;   throw(type_error(_X = Y, 2, Txt, Y))
   55    ),
   56    !