#!/usr/bin/env python
# encoding=utf-8 (pep 0263)
nil = None
def addleaf(tree, x):
if tree == nil:
return (nil, x, nil)
left, root, right = tree
if x == root:
return tree
if root > x:
return (addleaf(left, x), root, right)
else:
return (left, root, addleaf(right, x))
def show(tree):
show2(tree, 0)
def show2(tree, indent):
if tree == nil:
return
left, root, right = tree
show2(right, indent+2)
print("%s%s" % (" " * indent, root))
show2(left, indent+2)
# demonstracni vypis
if __name__ == "__main__":
print("Binarni stromy")
print("--------------\n")
print("Vysledek volani")
print("T = addleaf(nil, 6); T1 = addleaf(T, 8); T2 = addleaf(T1, 2); " +
"T3 = addleaf(T2, 4); T4 = addleaf(T3, 1); show(T4) :")
T = addleaf(nil, 6)
T1 = addleaf(T, 8)
T2 = addleaf(T1, 2)
T3 = addleaf(T2, 4)
T4 = addleaf(T3, 1)
show(T4)
print("\nVysledek volani")
print("T5 = addleaf((((nil, 1, nil), 2, ((nil, 3, nil), 4, (nil, 5, nil))), " +
"6, ((nil, 7, nil), 8, (nil, 9, nil))), 10); show(T5) :")
T5 = addleaf((((nil, 1, nil), 2, ((nil, 3, nil), 4, (nil, 5, nil))),
6, ((nil, 7, nil), 8, (nil, 9, nil))), 10)
show(T5)
Binarni stromy
--------------
Vysledek volani
T = addleaf(nil, 6); T1 = addleaf(T, 8); T2 = addleaf(T1, 2); T3 = addleaf(T2, 4); T4 = addleaf(T3, 1); show(T4) :
8
6
4
2
1
Vysledek volani
T5 = addleaf((((nil, 1, nil), 2, ((nil, 3, nil), 4, (nil, 5, nil))), 6, ((nil, 7, nil), 8, (nil, 9, nil))), 10); show(T5) :
10
9
8
7
6
5
4
3
2
1
| % nacteni:
/* ['2.6_13.pl']. */
% ve SWISH muze hlasit chybu "No permission to call sandboxed `tab(_4808)'"
% reseni viz https://github.com/SWI-Prolog/swish/issues/119
addleaf(nil,X,t(nil,X,nil)).
addleaf(t(Left,X, Right),X ,t(Left ,X, Right)).
addleaf(t(Left,Root,Right),X ,t(Left1,Root,Right)) :- Root>X,addleaf(Left, X, Left1).
addleaf(t(Left ,Root,Right),X,t(Left ,Root,Right1)) :- Root<X,addleaf(Right,X,Right1).
show(T) :- show2(T,0).
show2(nil,_).
show2(t(L,X,R),Indent) :- Ind2 is Indent+2,show2(R,Ind2),tab(Indent),
write(X),nl,show2(L,Ind2).
% demonstracni vypis
% abychom se vyhli varovanim "Redefined static procedure ..."
:- dynamic
start/0.
start:-
write('Binarni stromy'),nl,
write('--------------'),nl, nl,
write('Vysledek volani '),nl,
write('addleaf(nil ,6,T),addleaf(T,8,T1), addleaf(T1,2,T2),'),nl,
write('addleaf(T2,4,T3), addleaf(T3,1,T4), show(T4) :'),nl,
addleaf(nil ,6,T),addleaf(T,8,T1), addleaf(T1,2,T2), addleaf(T2,4,T3), addleaf(T3,1,T4),
show(T4),
write('Vysledek volani '),nl,
write('addleaf(t(t(t(nil,1,nil),2, t( t( nil ,3, nil ),4, t( nil ,5, nil ))),'),nl,
write(' 6, t( t( nil ,7, nil ),8, t( nil ,9, nil ))), 10, T5), show(T5) :'),nl,
addleaf(t(t(t(nil,1,nil),2, t( t( nil ,3, nil ),4, t( nil ,5, nil ))), 6, t( t( nil ,7, nil ),8, t( nil ,9, nil ))), 10, T5),
show(T5).
?-start.
:- retractall(write_all_X/3).
:- retractall(start/0).
Binarni stromy
--------------
Vysledek volani
addleaf(nil ,6,T),addleaf(T,8,T1), addleaf(T1,2,T2),
addleaf(T2,4,T3), addleaf(T3,1,T4), show(T4) :
8
6
4
2
1
Vysledek volani
addleaf(t(t(t(nil,1,nil),2, t( t( nil ,3, nil ),4, t( nil ,5, nil ))),
6, t( t( nil ,7, nil ),8, t( nil ,9, nil ))), 10, T5), show(T5) :
10
9
8
7
6
5
4
3
2
1
|