76 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			76 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | :- load_foreign_files(['libudi_b+tree'],[],udi_btree_init). | ||
|  | 
 | ||
|  | :- op(700,fx,max). | ||
|  | :- op(700,fx,min). | ||
|  | :- op(700,xfx,#==). | ||
|  | :- op(700,xfx,#>). | ||
|  | :- op(700,xfx,#<). | ||
|  | :- op(700,xfx,#>=). | ||
|  | :- op(700,xfx,#=<). | ||
|  | 
 | ||
|  | max X :- %%this overrides any previous att | ||
|  |         attributes:put_att_term(X,max(C)). | ||
|  | 
 | ||
|  | min X :- %%this overrides any previous att | ||
|  |         attributes:put_att_term(X,min(C)). | ||
|  | 
 | ||
|  | X #== Y :-%%this overrides any previous att | ||
|  |         attributes:put_att_term(X,eq(C,Y)). | ||
|  | 
 | ||
|  | %% range definition | ||
|  | X #> Y :- | ||
|  |         attributes:get_all_atts(X,C), | ||
|  |         c1(C,gt(_,Y),NC), | ||
|  |         attributes:put_att_term(X,NC). | ||
|  | X #>= Y :- | ||
|  |         attributes:get_all_atts(X,C), | ||
|  |         c1(C,ge(_,Y),NC), | ||
|  |         attributes:put_att_term(X,NC). | ||
|  | X #=< Y :- | ||
|  |         attributes:get_all_atts(X,C), | ||
|  |         c1(C,le(_,Y),NC), | ||
|  |         attributes:put_att_term(X,NC). | ||
|  | X #< Y :- | ||
|  |         attributes:get_all_atts(X,C), | ||
|  |         c1(C,lt(_,Y),NC), | ||
|  |         attributes:put_att_term(X,NC). | ||
|  | 
 | ||
|  | c1(A,X,X) :- | ||
|  |         var(A), !. | ||
|  | 
 | ||
|  | c1(gt(_,X),gt(_,Y),gt(_,Z)) :- | ||
|  |         Z is max(X,Y). | ||
|  | c1(gt(_,X),ge(_,Y),ge(_,Y)) :- | ||
|  |         Y is max(X,Y). | ||
|  | c1(gt(_,X),ge(_,Y),gt(_,X)) :- | ||
|  |         X is max(X,Y). | ||
|  | c1(ge(_,X),ge(_,Y),ge(_,Z)) :- | ||
|  |         Z is max(X,Y). | ||
|  | c1(ge(_,X),gt(_,Y),ge(_,X)) :- | ||
|  |         X is max(X,Y). | ||
|  | c1(ge(_,X),gt(_,Y),gt(_,Y)) :- | ||
|  |         Y is max(X,Y). | ||
|  | 
 | ||
|  | c1(lt(_,X),lt(_,Y),lt(_,Z)) :- | ||
|  |         Z is min(X,Y). | ||
|  | c1(lt(_,X),le(_,Y),le(_,Y)) :- | ||
|  |         Y is min(X,Y). | ||
|  | c1(lt(_,X),le(_,Y),lt(_,X)) :- | ||
|  |         X is min(X,Y). | ||
|  | c1(le(_,X),ge(_,Y),le(_,Z)) :- | ||
|  |         Z is min(X,Y). | ||
|  | c1(le(_,X),lt(_,Y),le(_,X)) :- | ||
|  |         X is min(X,Y). | ||
|  | c1(le(_,X),lt(_,Y),lt(_,Y)) :- | ||
|  |         Y is min(X,Y). | ||
|  | 
 | ||
|  | /*range construct*/ | ||
|  | c1(gt(_,X),lt(_,Y),range(_,X,false,Y,false)). | ||
|  | c1(gt(_,X),le(_,Y),range(_,X,false,Y,true)). | ||
|  | c1(lt(_,Y),gt(_,X),range(_,X,false,Y,false)). | ||
|  | c1(lt(_,Y),ge(_,X),range(_,X,true,Y,false)). | ||
|  | c1(le(_,Y),gt(_,X),range(_,X,false,Y,true)). | ||
|  | c1(le(_,Y),ge(_,X),range(_,X,true,Y,true)). | ||
|  | c1(ge(_,X),lt(_,Y),range(_,X,true,Y,false)). | ||
|  | c1(ge(_,X),le(_,Y),range(_,X,true,Y,true)). | ||
|  | /*still needs to construct range +stuff*/ |