CIS 479/579 Project 1
                      Summer 2018
 
Your first programming assignment will give you a chance
to explore symbolic computation as you write a series of Lisp
functions to help Robbie the robot move around his house. A
map of his house appears below. 
                                                         N
                                                         |
       Library----------Upstairs-Bedroom               W-+-E
          |                    |                         |
          |                    |                         S
          |               Front-Stairs
      Back-Stairs              |
          |                    |
          |                    |
          |               Living-Room-----------Kitchen
          |                    |                   |
          |                    |                   |
   Downstairs-Bedroom-----Dining-Room------------Pantry
 
This may be represented by a Lisp association list having one entry 
for each room which looks like the following:
 
                (LIVING-ROOM (NORTH FRONT-STAIRS)
                             (SOUTH DINING-ROOM)
                             (EAST KITCHEN))
 
 
The entire map can be found by clicking this link robbie.txt.
Download a copy of this and then write the Lisp functions described 
below:
 
  1. A function CHOICES which takes the name of the room and
     returns the table of permissible choices for Robbie's next
     destination. For example (CHOICES 'PANTRY) returns the
     list ((NORTH KITCHEN) (WEST DINING-ROOM)).
 
  2. The function LOOK that takes two inputs, a direction and a
     room, and tells Robbie where he will end up if he moved in
     that direction from that room. For example if Robbie were
     to (LOOK 'NORTH 'PANTRY) he would get (KITCHEN), (LOOK 'WEST
     'PANTRY) gives him (DINING-ROOM), (LOOK 'SOUTH 'PANTRY)
     gives NIL. (Hint: Use CHOICES somewhere.)
 
  3. An expression which sets a global variable LOC to hold
     Robbie's current position in the PANTRY.
 
  4. A function HOW-MANY-CHOICES that tells how many choices
     Robbie has for where he may move given the current value of
     the variable LOC. If Robbie is in the PANTRY the function
     should return 2.
 
  5. A predicate function UPSTAIRSP that returns T if it’s input
     is an upstairs locations The UPSTAIRS-BEDROOM and the
     LIBRARY are the only rooms which qualify.
 
  6. A predicate function ONSTAIRSP which returns T if it’s input
     is either FRONT-STAIRS or BACK-STAIRS.
 
  7. A function WHERE that requires no inputs and tells Robbie
     where he is. If he is in the LIBRARY where should return
     (ROBBIE IS UPSTAIRS IN THE LIBRARY), if he is in the KITCHEN
     it should return (ROBBIE IS DOWNSTAIRS IN THE KITCHEN), and
     if he is on the front stairs it should return (ROBBIE IS ON
     THE FRONT-STAIRS). (Hint: Use your predicate functions.)
 
  8. A function MOVE that takes one input, a direction, and moves
     Robbie in that direction. MOVE should make use of your LOOK
     function. If he can't move in the requested direction, an
     appropriate message should be returned. For example, if
     Robbie is in the PANTRY (MOVE 'SOUTH) should return (OUCH!
     ROBBIE HIT A WALL), while (MOVE 'NORTH) should return
     (ROBBIE IS DOWNSTAIRS IN THE KITCHEN).
 
  9. Adapt one of the search functions presented in class to
     help Robbie find a path from PANTRY to the KITCHEN that
     passes through the LIBRARY.
 
     None of these functions is particularly long, if you keep in 
mind that you are working with Common LISP (not Java or C++). 
You should feel free to write any auxiliary functions that would 
make your work easier to do. In fact, it may be the case that, 
using one of the functions defined above will make your work go 
much more quickly (and help improve the structure of your code as 
well). You should use XLISP, Lispworks, or Common Lisp for this 
assignment. You will need to turn in a well commented source 
listing containing your function definitions, carefully organized 
test runs (perhaps using the Common Lisp DRIBBLE function and 
adding some annotations to the file using your favorite word 
processing program to make your output easier to follow), and 
a two page memo discussing the nature (strengths, weaknesses, 
general approach, etc.) of your solution. All work is to be submitted 
as a single MS Word doc or PDF file.
 
Date assigned: 5/09/18
Date due:      5/16/18