anchor.diff:    (erase ?goal))
   
   (defrule drop-object :forward :context mab
  -  (goal ?goal action hold argument-1 blank)
  +  (goal-is-to ?goal action hold argument-1 blank)
     (monkey ?monkey location ?place on-top-of ?on
             holding ?name)
  -  (test (not (eql ?name blank)))
  +  (test (not (eql ?name 'blank)))
     (thing ?thing name ?name)
     -->
     ((format t "Monkey drops the ~A.~%" ?name))
  
positive.code:   (goal-is-to ? action hold argument-1 ?obj)
    (thing ? name ?obj location ?place on-top-of ceiling weight light)
    (thing ? name ladder location ?place on-top-of floor)
    (not (monkey ? on-top-of ladder))
    (not (goal-is-to ? action on argument-1 ladder))
    -->
    (assert (goal-is-to ? action on argument-1 ladder)))
  
negative.code: ;;; startup rule...
  
  (defun startup ()
    (make-instance 'monkey :location 't5-7 :on-top-of 'green-couch
                   :holding 'blank)
    (make-instance 'thing :name 'green-couch :location 't5-7 :weight 'heavy
                   :on-top-of 'floor)
    (make-instance 'thing :name 'red-couch :location 't2-2 
                   :on-top-of 'floor :weight 'heavy)
    (make-instance 'thing :name 'big-pillow :location 't2-2 
                   :weight 'light :on-top-of 'red-couch)
    (make-instance 'thing :name 'red-chest :location 't2-2 
                   :weight 'light :on-top-of 'big-pillow)
    (make-instance 'chest :name 'red-chest :contents 'ladder :unlocked-by 'red-key)
    (make-instance 'thing :name 'blue-chest :location 't7-7 
                   :weight 'light :on-top-of 'ceiling)
    (make-instance 'thing :name 'grapes :location 't7-8 
                   :weight 'light :on-top-of 'ceiling)
    (make-instance 'chest :name 'blue-chest :contents 'bananas :unlocked-by 'blue-key)
    (make-instance 'thing :name 'blue-couch :location 't8-8 
                   :on-top-of 'floor :weight 'heavy)
    (make-instance 'thing :name 'green-chest :location 't8-8 
                   :weight 'light :on-top-of 'ceiling)
    (make-instance 'chest :name 'green-chest :contents 'blue-key :unlocked-by 'red-key)
    (make-instance 'thing :name 'red-key 
                   :on-top-of 'floor :weight 'light :location 't1-3)
    (make-instance 'goal-is-to :action 'eat :argument-1 'bananas))
  
  (defun run-mab (&optional (ntimes 1))
    (flet ((repeat-mab ()
             (dotimes (i ntimes)
               (format t "Starting run.~%")
               (reset)
               (startup)
               (infer :contexts '(mab)))))
      (time (repeat-mab))))
  