Now let's use this function to describe the floor:
|
(defun describe-floor (loc objs obj-loc)
(apply #'append (mapcar (lambda (x)
`(you see a ,x on the floor -))
(remove-if-not (lambda (x)
(is-at x loc obj-loc))
objs))))
|
This function has a couple of new things: First of all, it has
anonymous functions (lambda is just a fancy word for
this). That first lambda form is just the same as defining a
helper function
(defun blabla (x) `(you see a ,x on the floor.))
and then sending #'blabla to the mapcar
function. The remove-if-not function removes any
objects from the list that are not at the current location
before passing the list on to mapcar to build
pretty sentences. Let's try this new function:
|
(describe-floor 'living-room objects object-locations)
|
==> (you see a whiskey-bottle on the floor - you see a bucket
on the floor -)
|
Now we can tie all these descriptor functions into a single,
easy command called look that uses the global
variables (therefore this function is not in the
Functional Programming style) to feed all the
descriptor functions and describes everything:
|
(defun look ()
(append (describe-location location map)
(describe-paths location map)
(describe-floor location objects object-locations)))
|
<< begin
< previous -
next >
end >>
|