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

  1. /*
  2.    Turbo Prolog 2.0 Chapter 7, Example Program 9
  3.    
  4.    Copyright (c) 1986, 88 by Borland International, Inc
  5.    
  6. */
  7.    
  8. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  9.  * Simple tree-building procedures                                         *
  10.  * create_tree(A, B) puts A in the data field of a one-cell tree giving B  *
  11.  * insert_left(A, B, C) inserts A as left subtree of B giving C            *
  12.  * insert_right(A, B, C) inserts A as right subtree of B giving C          *
  13.  *                                       *
  14.  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  15.  
  16. domains
  17.    treetype = tree(string, treetype, treetype) ; empty()
  18.  
  19. predicates
  20.    create_tree(string, treetype)
  21.    insert_left(treetype, treetype, treetype)
  22.    insert_right(treetype, treetype, treetype)
  23.  
  24. clauses
  25.    create_tree(A, tree(A, empty, empty)).
  26.    insert_left(X, tree(A, _, B), tree(A, X, B)).
  27.    insert_right(X, tree(A, B, _), tree(A, B, X)).
  28.  
  29. goal
  30.  
  31.    /* First create some one-cell trees... */
  32.  
  33.    create_tree("Charles", Ch),
  34.    create_tree("Hazel", H),
  35.    create_tree("Michael", Mi),
  36.    create_tree("Jim", J),
  37.    create_tree("Eleanor", E),
  38.    create_tree("Melody", Me),
  39.    create_tree("Cathy", Ca),
  40.  
  41.    /* ...then link them up... */
  42.  
  43.    insert_left(Ch, Mi, Mi2),
  44.    insert_right(H, Mi2, Mi3),
  45.    insert_left(J, Me, Me2),
  46.    insert_right(E, Me2, Me3),
  47.    insert_left(Mi3, Ca, Ca2),
  48.    insert_right(Me3, Ca2, Ca3),
  49.  
  50.    /* ...and print the result. */
  51.  
  52.    write(Ca3), nl.
  53.