anchor.diff:    (when (zerop (ticks instance))
       (setf (aref (town-history instance) (mod (ticks instance) (period instance))) (population instance))))
   
  +(defun make-foggy-town (population visibility &key (hipsterish-tendency 2/3) (styles #(#\# #\.)))
  +  (make-instance 'foggy-town
  +                 :population (generate-random-town population styles)
  +                 :visibility visibility
  +                 :hipsterish-tendency hipsterish-tendency
  +                 :styles styles))
  +
   ;;; Common class methods
   
   (defmethod print-object ((object town-snapshot) stream)
  
positive.code:   (with-accessors ((ticks ticks) (population population) (tendency hipsterish-tendency) (styles styles) (period period)) object
      (print-unreadable-object (object stream :type t)
        (format stream ":POPULATION ~a :TENDENCY ~4,2f% :STYLES ~a :DELAY ~a @ t = ~a" (length population) (* tendency 100) (length styles) period ticks))))
  
  (defgeneric copy-town (town)
    (:documentation "Returns a deep copy of a given town. Useful for when you need to keep the initiator town around.")
  
negative.code:     (call-next-method
       (make-instance 'town-snapshot
                      :styles (styles town)
                      :population (aref (town-history town) (mod (1+ (ticks town)) (period town))))))
    (:method ((town foggy-town))
      (loop with stats = (loop for style across (styles town) collect (cons style 0))
            with population = (population town)
            for i from 1 to (visibility town)
            for sample = (nth (random (length population)) population)
            do (incf (cdr (assoc sample stats)))
            finally (return stats))))
            
  
  (defgeneric survey (town)
    (:documentation "Counts what styles the inhabitant sees.")
  