Learn Lisp with me - 2
programming lispCreating an alist
- association list #
(defparameter *nodes* '((living-room (you are in the living-room.
a wizard is snoring loudly on the couch.))
(garden (you are in a beautiful garden.
there is a well in front of you.))
(attic (you are in the attic.
there is a giant welding torch in the corner.))))
Function mapping with mapcar
#
(mapcar #'describe-path '((GARDEN WEST DOOR) (ATTIC UPSTAIRS LADDER)))
((THERE IS A DOOR GOING WEST FROM HERE.) (THERE IS A LADDER GOING UPSTAIRS FROM HERE.))
mapcar
takes one function and maps it to every member of the list.
Functions that take other functions as parameters, such as mapcar
, are very
useful and a distinguishing feature of Lisp. Such functions are called higher-
order functions.
(mapcar #'car '((foo bar) (baz qux)))
is the same as
(mapcar (function car) '((foo bar) (baz qux)))
(foo baz)
The append
function #
(append '(mary had) '(a) '(little lamb))
(MARY HAD A LITTLE LAMB)
The apply
function #
(apply #'append '((THERE IS A DOOR GOING WEST FROM HERE.)
(THERE IS A LADDER GOING UPSTAIRS FROM HERE.)))
(THERE IS A DOOR GOING WEST FROM HERE. THERE IS A LADDER GOING UPSTAIRS FROM HERE.)
The find
function #
(find 'y '((5 x) (3 y) (7 z)) :key #'cadr)
(3 Y)
push
, but gently #
(defparameter *foo* '(1 2 3))
FOO
(push 7 *foo*)
(7 1 2 3)
*foo*
(7 1 2 3)
Are you even a member
? #
It's still not over. Stay tuned for updates.