anchor.diff:  (read-from-string "#`(print (list ,a0 ,a1 ,(progn #`(foo ,a4) `(bar ,a2))))")
   (read-from-string "#`(print (list ,a0 ,a1 ,(progn #`(foo ,a4) #`(bar ,a2))))")
   (read-from-string "#`(print (list ,abc ,a1 ,a3))")
  -(read-from-string "#`(print (list ,a (bc ,a2) ,a1 ,a0))")
  +(let ((*read-base* 4))
  +  (read-from-string "#`(print (list ,a10 (bc ,a2) ,a1 ,a0 a4))"))
  +(read-from-string "#`(print (list ,a2bc ,a1 ,a3))")
  +
  +(read-from-string "#`(list ,a0)")
  +(read-from-string "#`(list ,a1 ,a0)")
  +(read-from-string "#`(list ,a\\1 ,a0)")
  +(read-from-string "#`(list ,a1\\1 ,a0)")
  
positive.code: ;;; preferable.
  (in-package :abackquote)
  
  (defun anaphora-suffix-p (strm)
    ;; Here, base must be 10. The definition of anaphora is the basis.
    ;; Even if *READ-BASE* is not 10.
    ;; TODO: FIXME!
    (digit-char-p (peek-char nil strm t nil t)))
  
  (defun intern-anaphora (asuffix)
    (intern (format nil "A~D" asuffix)))
  
negative.code:         (set-macro-character
            #\a (lambda (strm c)
                  (declare (ignore c))
                  (multiple-value-bind (suffix anaphora?)
                    (read-suffix strm)
                    (if anaphora?
                      (car (pushnew (intern-anaphora suffix) anaphoras))
                      (let ((fake (make-concatenated-stream
                                    (make-string-input-stream (concat-str "\\A" suffix))
                                    strm)))
                        (read fake t nil t)))))
            t)
          (let ((expr (funcall bqreader-fn strm nil)))
            `(lambda ,(sort anaphoras #'string<= :key #'symbol-name)
  