CIS 479/579 Project 1
                      Summer 2008

Your first programming assignment will give you an 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 ie in the PANTRY the function
     should return 2.

  5. A predicate function UPSTAIRSP that returns T if its 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 its 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 Pascal 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 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 submittted as a single MS Word doc or
PDF file.

Date assigned: 5/07/08
Date due:      5/14/08