anchor.diff:      (update learner (cdr datum) (car datum)))
     learner)
   
  +(defmethod train-with-interim-test ((learner learner) training-data test-data span)
  +  (let ((result nil))
  +    (loop for i from 0 to (1- (length training-data))
  +	  for datum in training-data
  +	  do
  +       (update learner (cdr datum) (car datum))
  +       (when (zerop (mod i span))
  +	 (push (test learner test-data :quiet-p t) result)))
  +    (nreverse result)))
  +
   ;;; Perceptron
  -(defclass perceptron (learner) ())
  +(defclass$ perceptron (learner))
   
   (defun make-perceptron (input-dimension)
     (check-type input-dimension integer)
  
positive.code: 	(v-scale (tmp-vec1-of learner) (* alpha training-label) (tmp-vec2-of learner))
  	(v+ (weight-of learner) (tmp-vec2-of learner) (weight-of learner))
  	;; Update bias
  	(setf (bias-of learner) (+ (bias-of learner) (* alpha (bias-confidence-of learner) training-label)))
  	;; Update weight-confidence
  	(diagonal-matrix-multiplication (tmp-vec1-of learner) (tmp-vec1-of learner) (tmp-vec1-of learner))
  	(v-scale (tmp-vec1-of learner) beta (tmp-vec1-of learner))
  	(v- (weight-confidence-of learner) (tmp-vec1-of learner) (weight-confidence-of learner))
  	;; Update bias-confidence
  	(setf (bias-confidence-of learner)
  	      (- (bias-confidence-of learner)
  		 (* beta (bias-confidence-of learner)
  		    (bias-confidence-of learner)))))))
    learner)
  
negative.code:   learner)
  
  ;;; Averaged Perceptron
  (defclass$ averaged-perceptron (perceptron)
    data-size averaged-weight averaged-bias counter tmp-vec)
  
  (defun make-averaged-perceptron (input-dimension data-size)
    (check-type input-dimension integer)
  