anchor.diff:    (princ x str))
   
   (defun %print-atom (x str info)
  -  (?
  -    (character? x)  (%print-character x str)
  -    (number? x)     (princ x str)
  -    (string? x)     (%print-string x str)
  -    (array? x)      (%print-array x str info)
  -    (function? x)   (%print-function x str info)
  -    (symbol? x)     (%print-symbol x str)
  -    (object? x)     (%print-object x str info)
  -    "UNKNOWN OBJECT"))
  +  (%with-padding str info
  +    (?
  +      (symbol? x)     (%print-symbol x str)
  +      (character? x)  (%print-character x str)
  +      (number? x)     (princ x str)
  +      (string? x)     (%print-string x str)
  +      (array? x)      (%print-array x str info)
  +      (function? x)   (%print-function x str info)
  +      (object? x)     (%print-object x str info)
  +      "UNKNOWN OBJECT")))
   
   (defun %late-print (x str info)
     (? (cons? x)
  
positive.code: 
  (defstruct print-info
    (pretty-print?  nil)
    (indentation    0))
  
  (defvar *print-automatic-newline?* t)
  
  (defun %print-indentation (str info)
    (adotimes ((print-info-indentation info))
      (princ " " str)))
  
  (defun %print-rest (x str info)
    (when x
      (? (cons? x)
         (progn
           (princ " " str)
           (%late-print x. str info)
           (%print-rest .x str info))
         (progn
  
negative.code:       (unless (eq ! (car (last x)))
          (terpri str)))))
  
  (defun %print-args (x str info)
    (adolist x
      (?
        (not !.)    (%with-brackets str info
                      (%print-args .! str info))
        (cons? .!)  (case .!. :test #'eq
                      '&body  (%print-body ..! str info)
                      '&rest  (%print-rest ..! str info)
                      (%print-cons .! str info))
        (with-temporary *print-automatic-newline?* nil
          (%late-print .! str info)))))
  
  (defun %print-call (x argdef str info)
    (%print-args (%print-get-args x argdef) str info))
  
  (defun %print-abbreviation (abbreviation x str info)
    (princ abbreviation)
    (%late-print .x. str info))
  
  (defconstant *printer-abbreviations* '((quote              "'")
                                         (backquote          "`")
                                         (quasiquote         ",")
                                         (quasiquote-splice  ",@")
                                         (function           "#'")))
  
  (defun %print-call? (x info)
    (& (print-info-pretty-print? info)
       (symbol? x.)
       (!? (symbol-function x.)
           (& (function? !)
              (function-arguments !)))))
  
  (defun %print-list (x str info)
    (%late-print x. str info)
    (!? (%print-call? x info)
        (%print-call .x ! str info)
        (%print-rest .x str info)))
  
  (defun %print-cons (x str info)
    (%with-brackets str info
      (!? (assoc x. *printer-abbreviations* :test #'eq)
          (%print-abbreviation .!. x str info)
          (%print-list x str info))))
  
  (defun %print-string (x str)
    (princ #\" str)
    (dolist (i (string-list x))
      (?
        (== i #\")  (princ "\\\"" str)
        (== i #\\)  (princ "\\\\" str)
        (princ i str)))
    (princ #\" str))
  
  (defun %print-symbol (x str)
    (awhen (symbol-package x)
      (princ (symbol-name !) str)
      (princ #\: str))
    (princ (symbol-name x) str))
  
  (defun %print-array (x str info)
    (princ "#" str)
    (%with-brackets str info
      (doarray (i x)
        (%late-print i str info))))
  
  (defun %print-function (x str info)
    (princ "#'" str)
  