Algebraic data types: Difference between revisions
Content added Content deleted
m (Added to <5 category) |
(Added Prolog version (untested)) |
||
Line 53: | Line 53: | ||
in let T (_,a,y,b) = ins s |
in let T (_,a,y,b) = ins s |
||
in T (B,a,y,b) |
in T (B,a,y,b) |
||
=={header|Prolog}}== |
|||
<prolog> |
|||
color(r). |
|||
color(b). |
|||
tree(e). |
|||
tree(t(C,L,_,R)) :- color(C), tree(L), tree(R). |
|||
balance(b, t(r,t(r,A,X,B),Y,C), Z, D, t(r,t(b,A,X,B),Y,t(b,C,Z,D))):-!. |
|||
balance(b, t(r,A,X,t(r,B,Y,C)), Z, D, t(r,t(b,A,X,B),Y,t(b,C,Z,D))):-!. |
|||
balance(b, A, X, t(r,t(r,B,Y,C),Z,D), t(r,t(b,A,X,B),Y,t(b,C,Z,D))):-!. |
|||
balance(b, A, X, t(r,B,Y,t(r,C,Z,D)), t(r,t(b,A,X,B),Y,t(b,C,Z,D))):-!. |
|||
balance(C, A, X, B, t(C,A,X,B)). |
|||
ins(X,e,t(r,e,X,e)) :- !. |
|||
ins(X,t(C,A,Y,B),R) :- X < Y, !, ins(X,A,Ao), balance(C,Ao,Y,B,R). |
|||
ins(X,t(C,A,Y,B),R) :- X > Y, !, ins(X,B,Bo), balance(C,A,Y,Bo,R). |
|||
ins(_,S,S). |
|||
insert(X,S,t(b,A,Y,B)) :- ins(X,S,t(_,A,Y,B)). |
|||
<prolog> |