anchor.diff:               (eq (cadr (assoc obj obj-locs)) loc)))
       (remove-if-not #'at-loc-p objs)))
   
  +
  +;; functional! no side-effects
   (defun describe-objects (loc objs obj-loc)
     "Describe the objects existent of the location
      @loc -> location symbol
  
positive.code:                         (garden (living-room east door))
                          (attic (living-room downstairs ladder))))
  
  ;; set of objects
  (defparameter *objects* '(whiskey bucket frog chain))
  
  
  ;; (object location)
  (defparameter *objects-locations* '((whiskey living-room)
                                     (bucket living-room)
                                     (chain garden)
                                     (frog garden)))
  
  
  (defun describe-location (location nodes)
    "Sucint description of the localation provide
     @location -> symbol
     @nodes -> association list"
    (cadr (assoc location nodes)))
  
  (defun describe-path (edge)
    "Sucint description of the path to achieve.
     @edge -> (neighbor direction way)"
    `(there is a ,(caddr edge) going ,(cadr edge) from here.))
  
  (defun describe-paths (location edges)
    "General description of the possible edges on each location
     @location -> symbol
     @edges -> association list of `(node (neighbor direction way))"
    (apply #'append (mapcar #'describe-path (cdr (assoc location edges)))))
  
  (defun objects-at (loc objs obj-locs)
    "Get the objects inside the location
     @loc -> location symbol
  
negative.code:                         (garden (you are in a beatiful garden.
                                   there is a well in front of you.))
                          (attic (you are in the attic.
                                  there os a giant welding torch in the corner.))))
  
  
  ;; (node (edge direction way))
  (defparameter *edges* '((living-room (garden west door)
  