anchor.diff:           (nearest (car (sort others #'< :key (lambda (x) (distance x sheep)))))
            (dist (distance nearest sheep))
            (new-status (cond
  -                           ((> dist 200) 'isolated)
  -                           ((> dist 60) 'lonely)
  -                           ((< dist 20) 'crowded)
  -                           (t 'content))))
  -    (unless (eq new-status (status sheep))
  +                           ((> dist 200) :isolated)
  +                           ((> dist 60) :lonely)
  +                           ((< dist 20) :crowded)
  +                           (t :content))))
  +    (unless (and (eq new-status (status sheep))
  +                 (or (eq (status sheep) :content)
  +                     (eq (status sheep) :isolated)))
         (setf (status sheep) new-status)
  -      (cond
  -        ((eq (status sheep) 'isolated)
  +      (ecase (status sheep)
  +        (:isolated
            (progn
              (setf (motivation sheep) .2)
              (setf (direction-fn sheep) (make-meander (heading sheep)))
              ))
  -        ((eq (status sheep) 'lonely)
  +        (:lonely
            (progn
              (setf (motivation sheep) .4)
              (setf (direction-fn sheep) (make-seek sheep nearest))
              ))
  -        ((eq (status sheep) 'crowded)
  +        (:crowded
            (progn
              (setf (motivation sheep) .5)
              (setf (direction-fn sheep) (make-avoid sheep nearest))
              ))
  -        ((eq (status sheep) 'content)
  +        (:content
            (progn
              (setf (motivation sheep) .1)
              (setf (direction-fn sheep) (make-meander (heading sheep)))
              ))))    
       (setf (motivation sheep) (cond 
  -                               ((eq (status sheep) 'isolated) .2)
  -                               ((eq (status sheep) 'lonely) .4)
  -                               ((eq (status sheep) 'crowded) .3)
  -                               ((eq (status sheep) 'content) .1))))
  +                               ((eq (status sheep) :isolated) .2)
  +                               ((eq (status sheep) :lonely) .4)
  +                               ((eq (status sheep) :crowded) .3)
  +                               ((eq (status sheep) :content) .1))))
     (call-next-method))
   
   (defmethod draw :around (cr object)
     (when cr (call-next-method)))
   
  -(defmethod draw (cr actor)
  +(defmethod draw (cr (actor actor))
     (cairo-set-source-rgb cr 0.8 0.4 0.2)
     (cairo-arc cr (x actor) (- +drawing-area-height+ (y actor)) 5 0 (* 2 pi))
     (cairo-fill cr)
  
positive.code:            (expt (- (y one) (y two)) 2))))
  
  (defun bearing (self other)
    (let ((result (atan (- (y other) (y self)) (- (x other) (x self)))))
      (if (> (x self) (x other))
          (+ result pi)
          result)))
  
  (defun random-heading ()
    (random (* 2 pi)))
  
negative.code:    (status
      :initarg :status
      :accessor status
      :initform :content)))
  
  (defmethod herd ((sheep sheep))
    (actors (environment sheep)))
  