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).
 |