anchor.diff:     (setf results (mapcar #'probability (list w l d) (list n n n)))
      (if demo (format t "End gathering statistics~%"))
      (mapcar #'list '(w l d) results)
  +)
  +
  +
  +(defmethod probability ((special integer) (total integer))
  +   ( / (float special) (float total))
  +)
  +
  +; root of the player hierarchy
  +(defclass player()
  +   ((name :accessor player-name :initarg :name :initform 'emanon))
  +)
  +
  +; random machine player
  +(defclass random-machine-player (player) ())
  +
  +; a human player
  +(defclass human-player (player) ())
  +
  +; heuristic machine player class
  +(defclass heuristic-machine-player (player)
  +   (
  +      (rules :accessor heuristic-machine-player-rules :initform ())
  +   )
  +)
  +
  +; model a heuristic learning player
  +(defclass heuristic-learning-machine-player (heuristic-machine-player)
  +   ()
   )
   
   (defmethod statistics ((play function) (x player) (o player) (n number) (demo t) &aux w ld )
  
positive.code:       (if (game-over-p *play-so-far*) (return nil))
     )
     (cond
        ((eq (analyze *play-so-far* 'w))
           (cond
              ((eq *most-recent-hmp-move* 'random)
                 (setf *nr-random-moves-wins-by-hmp* (+ 1 *nr-random-moves-wins-by-hmp*))
  
negative.code:          ((eq player 'x)
              (setf move (make-random-move x demo))
           )
           ((eq player 'o)
              (setf move (make-random-move o demo))
           )
        )
  