70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
							 | 
						||
| 
								 | 
							
								%  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( '../clpqr/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).
							 |