Advertisement
Guest User

Untitled

a guest
Sep 4th, 2012
3,500
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 1.24 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)
  8. nondeterm unionA(avl,char,avl,char,avl,avl)
  9. max(integer,integer,integer)
  10.  
  11. clauses
  12. run(A):-readchar(C),C<>'.',insertA(C,A,An),write(An),nl,run(An);write("\nThat's it\n").
  13.  
  14. insertA(New,avl(nil,0),avl(bt(avl(nil,0),New,avl(nil,0)),1)).
  15. insertA(E,avl(bt(Left,E,Right),H),avl(bt(Left,E,Right),H)).
  16.  
  17. insertA(New,avl(bt(Left,E,Right),_),NewA):-
  18.     New < E,
  19.     insertA(New,Left,avl(bt(LT,X,RT),_)),
  20.     unionA(LT,X,RT,E,Right,NewA).
  21.    
  22. insertA(New,avl(bt(Left,E,Right),_),NewA):-
  23.     New > E,
  24.     insertA(New,Right,avl(bt(LT,X,RT),_)),
  25.     unionA(Left,E,LT,X,RT,NewA).
  26.    
  27. 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)):-
  28.     H2>H1,H2>H3,
  29.     HA=H1+1,HB=H3+1,HC=HA+1.
  30.    
  31. 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)):-
  32.     H1>=H2,H1>=H3,
  33.     max(H2,H3,Hb), max(H1,HB,HA).
  34.    
  35. 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)):-
  36.     H3>=H2,H3>=H1,
  37.     max(H1,H2,HA),max(HA,H3,HB).
  38.    
  39. max(X,Y,Z) :- X>Y, !, Z=X+1.
  40. max(X,Y,Z) :- X<=Y,!, Z=Y+1.
  41.  
  42.  
  43. goal
  44. run(avl(nil,0)).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement