anchor.diff:  ;; #$ reader
   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   
  -(defun sharp-$-reader (stream chr arg)
  -  (declare (ignore chr arg))
  -  (let ((spec (read stream nil nil t)))
  -    (typecase spec
  -      (cons (make-unify-template (find-symbol (symbol-name (first spec)) (find-package :unify))
  -                                 (cdr spec)))
  -      (symbol (make-unify-template 'variable spec))
  -      (t (error "bad format of tempalte: ~A" spec)))))
  -
  -(set-dispatch-macro-character #\# #\$ #'unify::sharp-$-reader)
  +;; (defun sharp-$-reader (stream chr arg)
  +;;   (declare (ignore chr arg))
  +;;   (let ((spec (read stream nil nil t)))
  +;;     (typecase spec
  +;;       (cons (make-unify-template (find-symbol (symbol-name (first spec)) (find-package :unify))
  +;;                                  (cdr spec)))
  +;;       (symbol (make-unify-template 'variable spec))
  +;;       (t (error "bad format of tempalte: ~A" spec)))))
  +
  +;;(set-dispatch-macro-character #\# #\$ #'unify::sharp-$-reader)
  
positive.code:   (if bindings
        (unify/impl x y bindings)))
  
  ;;; unify/impl for cons
  
  (defmethod unify/impl ((a cons) (b cons) bindings)
    (unify (rest a) (rest b)
           (unify (first a) (first b) bindings)))
  
  ;;; unify/impl for strings
  
  
negative.code: (defmethod print-object ((tmpl concat-template) stream)
    (format stream "#$(CONCAT ~{~A~^ ~})" (template-spec tmpl)))
  
  ;;; remainder template
  
  (define-unify-template wildcard)
  
  (defmethod print-object ((tmpl wildcard-template) stream)
    (format stream "#$~A" (template-spec tmpl)))
  
  (defmethod template-variables ((tmpl wildcard-template))
    (list (template-spec tmpl)))
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;; unify/impl
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  