anchor.diff:                              exp)))))
             `(let ((,<> ,init))
                ,@(loop for (exp next-exp) on exps collect
  -                    (let ((exp (cond ((find-free-and-<>-symbol exp env) exp)
  +                    (let ((exp (cond ((find-<>-variable-in-same-context exp env) exp)
                                        (spear-p `(->> ,<> ,exp))
                                        (t `(-> ,<> ,exp)))))
                         (if next-exp `(setf ,<> ,exp) exp))))))))
  
positive.code:           `(block ,gblock
               (let ((,<> (or ,init (return-from ,gblock nil))))
                 ,@(loop for (exp next-exp) on exps collect
                        (let ((exp (cond ((find-free-and-<>-symbol exp env) exp)
                                         (spear-p `(->> ,<> ,exp))
                                         (t `(-> ,<> ,exp)))))
                          (if next-exp
  
negative.code: (defmacro cond-> (init &body exps) (cond-arrow-macro init exps))
  (defmacro cond->> (init &body exps) (cond-arrow-macro init exps t))
  
  (defun find-<>-variable-in-same-context% (form env)
    (handler-bind ((hu.dwim.walker:walker-warning #'muffle-warning))
      (let* ((walked (hu.dwim.walker:walk-form
                      form
  