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

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