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

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