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