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

  1. /*
  2.    Turbo Prolog 2.0 Chapter 18, Example Program 3
  3.    
  4.    Copyright (c) 1986, 88 by Borland International, Inc
  5.    
  6. */
  7.    
  8. domains
  9.    room     =  symbol
  10.    roomlist = room*
  11.  
  12. predicates
  13.    gallery(room, room)                /* There is a gallery between two rooms */
  14.    neighborroom(room, room)           /* Necessary because it does not matter */
  15.                     /* which direction you go along a gallery */
  16.    avoid(roomlist)
  17.    go(room, room)
  18.    route(room, room, roomlist)           /* This is the route to be followed. */
  19.                      /* roomlist consists of a list of rooms already visited. */
  20.    member(room, roomlist)
  21.  
  22. clauses
  23.    gallery(entry, monsters).            gallery(entry,fountain).
  24.    gallery(fountain, hell).             gallery(fountain, food).
  25.    gallery(exit, gold_treasure).        gallery(fountain, mermaid).
  26.    gallery(robbers, gold_treasure).     gallery(fountain, robbers).
  27.    gallery(food, gold_treasure).        gallery(mermaid, exit).
  28.    gallery(monsters, gold_treasure).    gallery(gold_treasure,exit).
  29.  
  30.    neighborroom(X, Y) :- gallery(X, Y).
  31.    neighborroom(X, Y) :- gallery(Y, X).
  32.  
  33.    avoid([monsters, robbers]).
  34.  
  35.    go(Here, There) :- route(Here, There, [Here]).
  36.    go(_, _).
  37.  
  38.    route(Room, Room, VisitedRooms) :-
  39.       member(gold_treasure, VisitedRooms),  write(VisitedRooms), nl.
  40.    route(Room, Way_out, VisitedRooms) :-
  41.       neighborroom(Room, Nextroom),
  42.       avoid(DangerousRooms),
  43.       not(member(NextRoom, DangerousRooms)),
  44.       not(member(NextRoom, VisitedRooms)),
  45.       route(NextRoom, Way_out, [NextRoom|VisitedRooms]).
  46.  
  47.    member(X, [X|_]).
  48.    member(X, [_|H]) :- member (X, H).
  49.