I don't see why the objects-at function needs the objects list. I cobbled
up something that does not require it (using just my newly aquired skills,
so it could be aweful)
(defun objects-at (location object-locations)
(labels ((at-location-p (object-location)
(eq location (cadr object-location))))
(mapcar #'car (remove-if-not #'at-location-p object-locations))
)
)
Is there any special reason to use two lists? Even design-wise I can't see
a reason to keep a list of objects. If they're not in locations, than why
would they matter?