home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l217 / 2.ddi / EXAMPLES / CH07EX11.PRO < prev    next >
Encoding:
Prolog Source  |  1990-03-26  |  1.5 KB  |  62 lines

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