anchor.diff:  (defpackage #:diss-counter
     (:use :cl)
  -  (:export #:diss-counter #:next #:diss-counter))
  +  (:export #:diss-counter #:next #:prob-fun #:reset-counts #:map-dc #:ref
  +           #:size #:square-count #:prob-sum #:ref-count #:elem-count))
   
   (in-package #:diss-counter)
   
  
positive.code:                    (entry-increase entry prob-fun))))))
        chosen)))
  
  (defun time-dc (dc iter-n)
    (time (dotimes (i iter-n)
            (next dc))))
  
negative.code:   (prob 0.0d0 :type double-float))
  
  (defclass diss-counter ()
    ((elems)
     (prob-fun
      :initarg :prob-fun
      :initform #'square-count
      :reader prob-fun)
     (prob-sum
      :accessor prob-sum
      :type double-float)))
  
  (defmacro do-entries ((var dc &optional return) &body body)
    (let ((arr (gensym "ELEM-ARRAY")))
      `(let ((,arr (slot-value 'elems ,dc)))
         (dotimes (i (length ,arr) ,return)
           (let ((,var (aref ,arr i)))
             ,@body)))))
  
  (defmethod initialize-instance :after ((dc diss-counter) &key objs)
    (let* ((prob-fun (slot-value dc 'prob-fun))
  