anchor.diff:  ;; (next-upto-n (pxrand '(1 2 3) 4))
   ;; ;=> (3 1 2 1)
   
  -See also: `prand', `pwrand', `pwxrand'"
  -  :defun (assert (or (not (listp list))
  -                     (position-if-not (lambda (i) (eql i (car list))) list))
  -                 (list)
  -                 "~s's LIST argument must have at least two non-eql elements." 'pxrand))
  +See also: `prand', `pwrand', `pwxrand'")
  +
  +(defmethod initialize-instance :after ((pxrand pxrand) &key)
  +  (with-slots (list) pxrand
  +    (assert (or (not (listp list))
  +                (position-if-not (lambda (i) (eql i (car list))) list))
  +            (list)
  +            "~S's input list must have at least two non-eql elements." 'pxrand)))
   
   (defmethod next ((pxrand pxrand-pstream))
     (with-slots (list last-result) pxrand
  
positive.code: ;; (next-upto-n (pwxrand '(1 2 3) '(7 5 3) 10))
  ;; ;=> (1 2 1 2 1 3 1 2 1 2)
  
  See also: `prand', `pxrand', `pwrand'"
    ;; FIX: maybe also take the weights into account to see that it doesn't get stuck?
    :defun (assert (or (not (listp list))
                       (position-if-not (lambda (i) (eql i (car list))) list))
                   (list)
                   "~s's input list must have at least two non-eql elements" 'pwxrand))
  
  (defmethod next ((pwxrand pwxrand-pstream))
    (with-slots (list weights last-result) pwxrand
  
negative.code:       (return-from next eop))
      (decf-remaining pwxrand)
      (let* ((clist (next list))
             (clist-length (length clist))
             (cweights (next weights))
             (cweights (cumulative-list (if (eql cweights :equal)
                                            (make-list clist-length :initial-element (/ 1 clist-length))
                                            (normalized-sum (mapcar #'next cweights))))))
        (setf last-result (loop :for res := (nth-wrap (index-of-greater-than (random 1.0) cweights) clist)
                                :if (or (not (slot-boundp pwxrand 'last-result))
                                        (not (eql res last-result)))
                                  :return res)))))
  