anchor.diff:     (status
       :initform 'meandering)))
   
  -(defmethod draw ((actor mover) cr)
  -  (cairo-set-source-rgb cr 0.0 0.0 1.0)
  -  (cairo-set-line-width cr 3.0)
  -  (cairo-move-to cr (x actor) (- +drawing-area-height+ (y actor)))
  -  (cairo-line-to cr
  -                 (+ (x actor) (* 15 (cos (heading actor))))
  -                 (- +drawing-area-height+ (+ (y actor) (* 9 (sin (heading actor))))))
  -  (cairo-stroke cr)
  -  (call-next-method))
  -
   (defclass sheep (mover)
     ((herd
       :initarg :herd
       :accessor herd
       :initform (error "Must supply a herd"))
      (name
  -    :initform 'sheep)))
  -
  -(defun make-herd (num-sheep)
  -  (let (herd)
  -    (dotimes (i num-sheep)
  -      (push (make-instance 'sheep :herd nil) herd))
  -    (dolist (sheep herd)
  -      (setf (herd sheep) herd))
  -    herd))
  +    :initform 'sheep)
  +   (status
  +    :initarg :status
  +    :accessor status
  +    :initform 'unknown)))
  +
  +(defgeneric update (actor))
  +(defgeneric draw (actor cr))
  +(defgeneric draw-label (actor cr))
   
   (defmethod update (mover)
     (when (< (random 1.0) (motivation mover))
  
positive.code:                          (lambda (widget cr)
                             (declare (ignore widget))
                             (let ((cr (pointer cr)))
                               (cairo-set-source-rgb cr 0.2 1.0 0.0)
                               (cairo-paint cr)
                               (dolist (actor actors) (draw actor cr))
                               (cairo-destroy cr)
  
negative.code:     #'(lambda ()
          (+ heading (random .3) -0.15))))
  
  (defun main ()
    (within-main-loop
     (let ((runningp t)
           (actors (make-herd 20))
           (window (make-instance 'gtk-window
                                  :type :toplevel
  