home *** CD-ROM | disk | FTP | other *** search
/ Programmer Plus 2007 / Programmer-Plus-2007.iso / Programming / Borland Plateform / Turbo Prolog 2 / EXAMPL53.PRO < prev    next >
Encoding:
Prolog Source  |  1986-04-25  |  1.6 KB  |  45 lines

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