anchor.diff:                                                   1/100))))))
   
   ;;; When seeing the development of the town, we need to repeat things a lot.
  -(defmacro with-town-iterator ((var town &key (times 20) (tick-time :before)) &body body)
  -  `(let ((,var ,town))
  +(defmacro with-town-iterator ((var town &key (times 20) (tick-time :before) copyp) &body body)
  +  "Creates a loop that evolves a town, allowing the user to do something for each generation of the town. Can be made nondestructive by passing non-nil to copyp."
  +  `(let ((,var ,(if copyp `(copy-town ,town) town)))
        (assert (typep ,var 'town-snapshot))
        (assert (typep ,tick-time '(member :before :after)))
        (assert (typep ,times '(integer 1)))
  
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))))
  
  ;;; Other methods
  
  
negative.code:                  ((true-with-probability 10/11) style-of-self)
                   (t (aref (styles town) (random (length (styles town)))))))
             (population town))))))
            
  (defgeneric tick! (town)
    (:documentation "Destructively modifies a snapshot to become the next iteration of the simulation.")
  