anchor.diff:              (node-id self)
               (mapcar #'edge-id (node-edges self)))))
   
  +(defun node-neighbors (node)
  +  (mapcar #'edge-to (node-edges node)))
  +
   (defun node-distance (node-1 node-2)
     (let* ((x1 (node-x node-1))
            (x2 (node-x node-2))
  
positive.code: #||
  (progn
    (defparameter *re-graph*
      (make-graph '((0.0 0.0 :id node-1) (0.0 1.0 :id node-2) (1.0 1.0 :id node-3))
                  '((node-1 node-2) (node-2 node-3))))
  
    (defparameter *rs*
      (let ((node-1 (find-node *re-graph* 'node-1))
  
negative.code:                (destructuring-bind (action-type &rest parameters) action
                   (ecase action-type
                     ((go)
                      ;; TODO: should we add additional damage for taking invalid choices?
                      (let* ((new-location (find-node (nav-graph env) (first parameters)))
                             (edge (find new-location (node-edges (rs-location state))
                                         :key 'edge-to)))
                        (cond (edge
                               (setf (rs-location new-state) new-location)
                               (incf (rs-damage new-state) (edge-cost edge)))
                              (t
                               (incf (rs-damage new-state) (invalid-action-cost env))))))
                     ((pickup)
                      (let ((item (first parameters))
                            (object-hash (rs-object-locations new-state)))
  