anchor.diff:      (symbol (length (symbol-name rope)))
       (character 1)))
   
  +(declaim (ftype (function (rope) non-negative-fixnum) rope-height))
   (defun rope-height (rope)
     (etypecase rope
       ((or string symbol character) 0)
  
positive.code:      (rope-list-cat (loop for rest = list then (cddr rest)
                         while rest
                         collect (%rope (first rest) (second rest)))))))
  
  (defun rope-array-cat (array
                         &key
  
negative.code:        (%rope (rope-array-cat array :start start :end midpoint)
                (rope-array-cat array :start midpoint :end end))))))
  
  
  (declaim (inline rope)
           (ftype (function * rope) rope))
  (defun rope (&rest args)
    "Concatenate all ropes in ARGS.
  
  