Anonymous user
Algebraic data types: Difference between revisions
cuts away prolog version
(cuts away prolog version) |
|||
Line 82:
(** val balance :: color * 'a tree * 'a * 'a tree -> 'a tree *)
let balance = function
| B, T (R, T (R,a,x,b), y, c
| B
| B, a, x, T (R, T (R,b,y,c), z, d)
| 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))
| col, a, x, b -> T (col, a, x, b)
Line 106 ⟶ 108:
color(b).
tree(_,e).
tree(P,t(C,L,
ins(X,t(C,A,Y,B),R) :- X < Y, !, ins(X,A,Ao), balance(C,Ao,Y,B,R).▼
ins(X,e,t(
; X > Y -> ins(X,B,Bo), balance(C,A,Y,Bo,R)
; X = Y -> R = t(C,A,Y,B)
).
insert(X,S,t(b,A,Y,B)) :- ins(X,S,t(_,A,Y,B)).
|