anchor.diff:  RETURNS: a rope concatenating FIRST and SECOND"
     (multiple-value-bind (first length-1 height-1)
         (%rope-helper first)
  -    (if (= 0 length-1)
  -        second
  -        (multiple-value-bind (second length-2 height-2)
  -            (%rope-helper second)
  -          (if (zerop length-2)
  -              first
  -              (make-rope-node :length (+ length-1 length-2)
  -                              :height (1+ (max height-1 height-2))
  -                              :left first
  -                              :right second))))))
  +    (multiple-value-bind (second length-2 height-2)
  +        (%rope-helper second)
  +      (cond ((zerop length-1)
  +             second)
  +            ((zerop length-2)
  +             first)
  +            (t
  +             (make-rope-node :length (+ length-1 length-2)
  +                             :height (1+ (max height-1 height-2))
  +                             :left first
  +                             :right second))))))
   
   (declaim (ftype (function (list) rope) rope-list-cat))
   (defun rope-list-cat (list)
  -  (cond
  -    ((null list)
  -     nil)
  -    ((null (cddr list))
  -     (%rope (first list) (second list)))
  -    (t
  -     (rope-list-cat (loop for rest = list then (cddr rest)
  -                       while rest
  -                       collect (%rope (first rest) (second rest)))))))
  +  (if (null (cddr list))
  +      (%rope (first list) (second list))
  +      (rope-list-cat (loop for rest = list then (cddr rest)
  +                        while rest
  +                        collect (%rope (first rest) (second rest))))))
   
   (declaim (ftype (function (array &key
                                    (:start fixnum)
  
positive.code:                          '|)|))))
         rope))
  
  (defgeneric object-rope (object))
  
  (defmethod object-rope ((object string))
    object)
  
negative.code:   (declare (dynamic-extent args))
    (when args (rope-list-cat args)))
  
  (declaim (ftype (function (t) rope) rope-1))
  (defun rope-1 (rope)
    (etypecase rope
      (rope rope)
      (list
       (rope-list-cat rope))
      (array
       (rope-array-cat rope))
      (t (object-rope-check rope))))
  
  
  (declaim (inline rope-2))
  (defun rope-2 (a1 a2)
    (%rope a1 a2))
  
  (defun rope-3 (a1 a2 a3)
    (%rope a1
           (%rope a2 a3)))
  
  (defun rope-4 (a1 a2 a3 a4)
    (%rope (%rope a1 a2)
           (%rope a3 a4)))
  