76 lines
2.0 KiB
Prolog
76 lines
2.0 KiB
Prolog
:- 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*/ |