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*/
							 |