Citirea unui arbore binar

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Citirea unui arbore binar %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Iosif Chelu, an III-ZI, 2009. % Facultatea de Matematica si Informatica, Universitatea Spiru Haret Bucuresti. % http://fmi.spiruharet.ro/bodorin/aicl.html %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Prolog, TP 2.0 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Citirea unui arbore binar. % Facsem 3 prototipuri inaintea ascestuia (fiecare nu mergea) si asta e bun. DOMAINS arb=t(arb,real,arb);nil PREDICATES citeste_arbore (arb) citeste_arb (arb) citeste_sub (arb) continui CLAUSES % Acest predicat este predicatul de pornire. % De fapt are doar o functie estetica: afiseaza "radacina" pentru a se stii ca se % incepe citirea arborelui, apoi apeleaza functia care citeste primul % varf: citeste_varf() al arborelui. citeste_arbore(ARB):- write("radacina: "), citeste_varf(Arb). % Predicatul care citeste varful unui arbore (sau subarbore). % Citeste varful ( H ) apoi apeleaza predicatul care citeste subarborele % stang ( L ) si subarborele drept ( R ). citeste_varf(t(L,H,R)):- readreal(H), citeste_sub(t(L,H,R)). % Predicatul care citeste subarborele ( t(L,H,R) ) cu varful deja stiut ( H ) % Daca nu se apasa 'y' pentru continuarea citirii, subarborii stang ( L ) si % drept ( R ) devin nil (adica H devine frunza). citeste_sub(t(L,H,R)):- continui, write("st[", H, "]="), citeste_varf(L), write("dr[", H, "]="), citeste_varf(R),!; L=nil,R=nil. % Un predicat care returneaza Adevarat daca s-a apasat tasta 'y' si Fals % daca s-a apasat orice alta tasta continui:- write("Continuati? (y/n)"),nl,readchar(X),X='y'.