anchor.diff:    (let ((iter (gensym "iterator")))
       `(let ((,iter
               (make-instance 'iterator :start (or ,start 0)
  -                           :end (let ((len (1- (length ,initial-contents)))
  -                                      (end (or ,end *limit*)))
  -                                  (or (when (not (null ,initial-contents))
  -                                        (if (= end *limit*)
  -                                            len
  -                                            (when (> end len)
  -                                              (error "length out of bounds"))))
  -                                      end))
  +                           :end (or (when ,initial-contents
  +                                      (let ((len (1- (length ,initial-contents))))
  +                                        (cond
  +                                          ((= ,end *limit*) len)
  +                                          ((> ,end len) (error "length out of bounds")))))
  +                                    ,end *limit*)
                              :inc ,inc :id ,id :cyclic ,cyclic
                              :initial-contents ,initial-contents
                              :initial-element ,initial-element)))
  
positive.code:                    (end end)) iter
      (or (eq end *limit*) (funcall check index end))))
  
  (defmethod next ((iter iterator))
    (with-accessors ((index index)
                     (element initial-element)
  
negative.code:       for iter-tmp = (if (listp tmp) (eval tmp) tmp)
        for result-tmp = (nth 2 clause)
        collect `(,var-name (next ,iter-tmp) (or (next ,iter-tmp) ,result-tmp)))
     `((some #'null (list ,@(mapcar #'first all-clauses))))))
  
  (defun list-to-alist (lst)
    (labels ((rec (lst alst)
  