Advertisement
Guest User

Untitled

a guest
Sep 4th, 2012
2,126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 3.96 KB | None | 0 0
  1. domains
  2. avl=avl(bt,integer)
  3. bt=bt(avl,char,avl);nil
  4.  
  5. predicates
  6. nondeterm run(avl)
  7. nondeterm insertA(char,avl,avl)domains
  8. bctt = tree(char,bctt,bctt); nil
  9.  
  10. predicates
  11. nondeterm del_min (char,bctt,bctt)
  12. nondeterm del_mem_tree (char,bctt,bctt)
  13. nondeterm modif_tree(bctt,bctt)
  14. nondeterm max_tree(char,bctt)
  15. nondeterm run(bctt)
  16. nondeterm do(char,bctt,bctt)
  17. nondeterm member(bctt,char)
  18. create_tree(bctt,bctt)
  19. insert(char,bctt,bctt)
  20. write_tree(bctt)
  21. height(bctt,integer)
  22. max(integer,integer,integer)
  23.  
  24. clauses
  25. run(Tree) :- nl,
  26.     write("***ENTER***\n"),
  27.     write("-1 to update\n"),
  28.     write("-2 to show TREE\n"),
  29.     write("-3 to find max element\n"),
  30.     write("-4 to check if character is tree member\n"),
  31.     write("-5 to show height of tree\n"),
  32.     write("-6 to delete element\n"),
  33.     write("-0 to EXIT\n"),
  34.     write(">_"),
  35.     readchar(C),write(C),nl,
  36.     do(C,Tree,NewTree),
  37.     run(NewTree).
  38.    
  39. do('1',Tree,NewTree) :-
  40.     write("Enter char or ? to END\n\n"),
  41.     create_tree(Tree,NewTree).
  42.  
  43. do('2',Tree,Tree) :-
  44.     nl,write_tree(Tree),nl,
  45.     write(Tree),nl.
  46.  
  47. do('3',Tree,Tree) :- max_tree(MAX,Tree),write("\n",MAX,"\n").
  48.  
  49. do('4',Tree,Tree) :-
  50.     write("\nEnter character: "),
  51.     readchar(X),write(X),nl,write(X),nl,
  52.     member(Tree,X),write(" is member of tree.\n");write(" is NOT member of tree.\n").
  53.  
  54. do('5',Tree,Tree) :-
  55.     height(Tree,H),
  56.     write("\nHeight is: ",H,".\n").
  57.  
  58. do('6',Tree,NewTree):-
  59.     write("\nEnter character: "),
  60.     modif_tree(Tree,NewTree).
  61.  
  62. do('0',_,nil) :- write("\nThat's all"), exit.
  63.  
  64. height(nil,0).
  65. height(tree(_,Left,Right),H):-
  66.     height(Left,HL),
  67.     height(Right,HR),
  68.     max(HL,HR,MH),H=MH+1.
  69.    
  70. max(X,Y,X):- X>=Y,!.
  71. max(_,Y,Y).
  72.  
  73. modif_tree(T,NT):-
  74.     readchar(C),nl,write(C),
  75.     del_mem_tree(C,T,TT),nl,write(TT),
  76.     modif_tree(TT,NT).
  77. modif_tree(T,T).
  78.  
  79. del_mem_tree(X,tree(X,L,nil),L).
  80. del_mem_tree(X,tree(X,nil,Right),Right).
  81. del_mem_tree(X,tree(E,L,R),tree(E,NL,R)):-
  82.     E>X,del_mem_tree(X,L,NL).
  83. del_mem_tree(X,tree(E,L,R),tree(E,L,NR)):-
  84.     X>E,del_mem_tree(X,R,NR).
  85. del_mem_tree(X,tree(X,L,R),tree(E,L,NR))
  86.     :-del_min(E,R,NR).
  87.  
  88. del_min(X,tree(X,nil,R),R).
  89. del_min (X,tree(E,L,R),tree(E,Nl,R)):-
  90.     del_min(X,L,Nl).
  91.  
  92. max_tree(E,tree(E,_,nil)):-!.
  93. max_tree(MAX,tree(_,_,Right)) :-
  94.     max_tree(MAX,Right).
  95.  
  96. member(tree(E,_,_),E) :- !.
  97. member(tree(_,Left,_),E) :- member(Left,E).
  98. member(tree(_,_,Right),E) :- member(Right,E).
  99.  
  100. create_tree(Tree,NewTree) :-
  101.     readchar(C),C<>'?',!,
  102.     write(C,","),
  103.     insert(C,Tree,TempTree),
  104.     create_tree(TempTree,NewTree).
  105.    
  106. create_tree(Tree,Tree).
  107.  
  108. insert(New,nil,tree(New,nil,nil)) :- !.
  109.  
  110. insert(New,tree(E,Left,Right),tree(E,NewLeft,Right)) :-
  111.     New < E,!,
  112.     insert(New,Left,NewLeft).
  113.    
  114. insert(New,tree(E,Left,Right),tree(E,Left,NewRight)) :-
  115.     insert(New,Right,NewRight).
  116.    
  117. write_tree(nil).
  118.  
  119. write_tree(tree(E,Left,Right)) :-
  120.     write_tree(Left),
  121.     write(E," "),
  122.     write_tree(Right).
  123.    
  124. goal
  125. run(nil).
  126. nondeterm unionA(avl,char,avl,char,avl,avl)
  127. max(integer,integer,integer)
  128.  
  129. clauses
  130. run(A):-readchar(C),C<>'.',insertA(C,A,An),write(An),nl,run(An);write("\nThat's it\n").
  131.  
  132. insertA(New,avl(nil,0),avl(bt(avl(nil,0),New,avl(nil,0)),1)).
  133. insertA(E,avl(bt(Left,E,Right),H),avl(bt(Left,E,Right),H)).
  134.  
  135. insertA(New,avl(bt(Left,E,Right),_),NewA):-
  136.     New < E,
  137.     insertA(New,Left,avl(bt(LT,X,RT),_)),
  138.     unionA(LT,X,RT,E,Right,NewA).
  139.    
  140. insertA(New,avl(bt(Left,E,Right),_),NewA):-
  141.     New > E,
  142.     insertA(New,Right,avl(bt(LT,X,RT),_)),
  143.     unionA(Left,E,LT,X,RT,NewA).
  144.    
  145. unionA(avl(T1,H1),A,avl(bt(L2,C,R2),H2),B,avl(T3,H3),avl(bt(avl(bt(avl(T1,H1),A,L2),HA),C,avl(bt(R2,B,avl(T3,H3)),HB)),HC)):-
  146.     H2>H1,H2>H3,
  147.     HA=H1+1,HB=H3+1,HC=HA+1.
  148.    
  149. unionA(avl(T1,H1),A,avl(T2,H2),B,avl(T3,H3),avl(bt(avl(T1,H1),A,avl(bt(avl(T2,H2),B,avl(T3,H3)),HB)),HA)):-
  150.     H1>=H2,H1>=H3,
  151.     max(H2,H3,Hb), max(H1,HB,HA).
  152.    
  153. unionA(avl(T1,H1),A,avl(T2,H2),B,avl(T3,H3),avl(bt(avl(bt(avl(T1,H1),A,avl(T2,H2)),HA),B,avl(T3,H3)),HB)):-
  154.     H3>=H2,H3>=H1,
  155.     max(H1,H2,HA),max(HA,H3,HB).
  156.    
  157. max(X,Y,Z) :- X>Y, !, Z=X+1.
  158. max(X,Y,Z) :- X<=Y,!, Z=Y+1.
  159.  
  160.  
  161. goal
  162. run(avl(nil,0)).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement