home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l210 / 1.ddi / EXAMPLES.ARC / CH07EX11.PRO < prev    next >
Encoding:
Prolog Source  |  1988-06-21  |  1.6 KB  |  65 lines

  1. /*
  2.    Turbo Prolog 2.0 Chapter 7, Example Program 11
  3.    
  4.    Copyright (c) 1986, 88 by Borland International, Inc
  5.    
  6. */
  7.  
  8. domains
  9.    chartree = tree(char, chartree, chartree); end
  10.  
  11. predicates
  12.    do(chartree)
  13.    action(integer, chartree, chartree)
  14.    create_tree(chartree, chartree)
  15.    insert(char, chartree, chartree)
  16.    write_tree(chartree)
  17.    repeat
  18.  
  19. goal
  20.    do(end).
  21.  
  22. clauses
  23.    do(Tree):-
  24.       makewindow(1, 7, 7, "character tree sort", 0, 0, 20, 60),
  25.       repeat,
  26.       clearwindow,
  27.       write("Enter 1 to create a tree\n"),
  28.       write("Enter 2 to show tree\n"),
  29.       write("Enter 7 to exit\n"),
  30.       readint(X),
  31.       action(X, Tree, NewTree),
  32.       do(NewTree).
  33.  
  34.    action(1, Tree, NewTree):-
  35.       write("Enter characters or # to end: "),
  36.       create_Tree(Tree, NewTree).
  37.    action(2, Tree, Tree):-
  38.       write_Tree(Tree),
  39.       write("\nPress a key to continue"),
  40.       readchar(_).
  41.    action(7, _, end):- exit.
  42.  
  43.    create_Tree(Tree, NewTree):-
  44.       readchar(C),
  45.       C<>'#',!,
  46.       write(C, " "),
  47.       insert(C, Tree, TempTree),
  48.       create_Tree(TempTree, NewTree).
  49.    create_Tree(Tree, Tree).
  50.  
  51.    insert(New, end, tree(New, end, end)):- !.
  52.    insert(New, tree(Element, Left, Right), tree(Element, NewLeft, Right)):-
  53.       New<Element, !,
  54.       insert(New, Left, NewLeft).
  55.    insert(New, tree(Element, Left, Right), tree(Element, Left, NewRight)):-
  56.       insert(New, Right, NewRight).
  57.  
  58.    write_Tree(end).
  59.    write_Tree(tree(Item, Left, Right)):-
  60.       write_Tree(Left),
  61.       write(Item, " "),
  62.       write_Tree(Right).
  63.  
  64.    repeat.
  65.    repeat:- repeat.