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