Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
30
Task/Algebraic-data-types/Picat/algebraic-data-types.picat
Normal file
30
Task/Algebraic-data-types/Picat/algebraic-data-types.picat
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
main =>
|
||||
T = e,
|
||||
foreach (X in 1..10)
|
||||
insert(X,T,T1),
|
||||
T := T1
|
||||
end,
|
||||
output(T,0).
|
||||
|
||||
insert(X,S,R) =>
|
||||
ins(X,S,R1),
|
||||
R1 = $t(_,A,Y,B),
|
||||
R = $t(b,A,Y,B).
|
||||
|
||||
ins(X,e,R) => R = $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(_X,T,R) => R = T.
|
||||
|
||||
balance(C,A,X,B,S) :- (bal(C,A,X,B,T) -> S = T ; S = $t(C,A,X,B)).
|
||||
|
||||
bal(b, t(r,t(r,A,X,B),Y,C), Z, D, R) => R = $t(r,t(b,A,X,B),Y,t(b,C,Z,D)).
|
||||
bal(b, t(r,A,X,t(r,B,Y,C)), Z, D, R) => R = $t(r,t(b,A,X,B),Y,t(b,C,Z,D)).
|
||||
bal(b, A, X, t(r,t(r,B,Y,C),Z,D), R) => R = $t(r,t(b,A,X,B),Y,t(b,C,Z,D)).
|
||||
bal(b, A, X, t(r,B,Y,t(r,C,Z,D)), R) => R = $t(r,t(b,A,X,B),Y,t(b,C,Z,D)).
|
||||
|
||||
output(e,Indent) => printf("%*w\n",Indent,e).
|
||||
output(t(C,A,Y,B),Indent) =>
|
||||
output(A,Indent+6),
|
||||
printf("%*w[%w]\n",Indent,C,Y),
|
||||
output(B,Indent+6).
|
||||
Loading…
Add table
Add a link
Reference in a new issue