b289d9ac9c
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@177 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
70 lines
1.9 KiB
Prolog
70 lines
1.9 KiB
Prolog
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% clp(q,r) version 1.3.3 %
|
|
% %
|
|
% (c) Copyright 1992,1993,1994,1995 %
|
|
% Austrian Research Institute for Artificial Intelligence (OFAI) %
|
|
% Schottengasse 3 %
|
|
% A-1010 Vienna, Austria %
|
|
% %
|
|
% File: arith_r.pl %
|
|
% Author: Christian Holzbaur christian@ai.univie.ac.at %
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
|
|
:- module( arith_r,
|
|
[
|
|
arith_eps/1,
|
|
arith_normalize/2,
|
|
integerp/1,
|
|
integerp/2
|
|
]).
|
|
|
|
%
|
|
% Modules receiving R expansion
|
|
%
|
|
arith_module( clpr).
|
|
arith_module( nfr).
|
|
|
|
:- multifile
|
|
user:goal_expansion/3.
|
|
|
|
:- dynamic
|
|
user:goal_expansion/3.
|
|
%
|
|
|
|
user:goal_expansion(arith_eval(Term,Res), Module, Expansion) :-
|
|
arith_module( Module),
|
|
compile_R( Term, Res, Code),
|
|
l2conj( Code, Expansion).
|
|
|
|
user:goal_expansion(arith_eval(Rel), Module, Expansion) :-
|
|
arith_module( Module),
|
|
compile_R( Rel, boolean, Code),
|
|
l2conj( Code, Expansion).
|
|
|
|
user:goal_expansion(case_signum(Term,Lt,Z,Gt), Module, Expansion) :-
|
|
arith_module( Module),
|
|
compile_case_signum_R( Term, Lt,Z,Gt, Code),
|
|
l2conj( Code, Expansion).
|
|
|
|
:- ensure_loaded( arith).
|
|
|
|
%
|
|
% This the only place where this constant lives
|
|
%
|
|
arith_eps( 1.0e-10). % for Monash #zero expansion 1.0e-12
|
|
eps( 1.0e-10, -1.0e-10).
|
|
|
|
arith_normalize( X, Norm) :- var(X), !,
|
|
raise_exception( instantiation_error(arith_normalize(X,Norm),1)).
|
|
arith_normalize( rat(N,D), Norm) :- rat_float( N,D, Norm).
|
|
arith_normalize( X, Norm) :- number(X),
|
|
Norm is float(X).
|
|
|
|
integerp( X) :-
|
|
floor(/*float?*/X)=:=X.
|
|
|
|
integerp( X, I) :-
|
|
floor(/*float?*/X)=:=X,
|
|
I is integer(X).
|