anchor.diff:    result)
   
   (defstruct (rat (:constructor make-rat (numer denom)))
  -  (numer 0  :type (or symbol integer polynomial))
  -  (denom 1 :type (or symbol integer polynomial)))
  +  (numer 0  :type (or integer polynomial))
  +  (denom 1 :type (or integer polynomial)))
   
   (defun rational-p (poly)
     (typep poly 'rat))
  -
  -#+(or)
  -(defun make-rat (numerator denominator)
  -  "Build a rational: a quotient of two polynomials."
  -  (cons numerator denominator)
  -  #+ (or)
  -  (if (numberp denominator)
  -      (k*poly (/ 1 denominator) numerator)
  -      (cons numerator denominator)))
   
   (defun normalize-rat (rat)
     (cond
  
positive.code: 
  (defun rat-numerator (rat)
    "The numerator of a rational expression."
    (typecase rat
      (rat (rat-numer rat))
      (number (numerator rat))
      (t rat)))
  
  (defun rat-denominator (rat)
    "The denominator of a rational expression."
    (typecase rat
      (rat (rat-denom rat))
      (number (denominator rat))
      (t 1)))
  
  (defun rat*rat (x y)
    "Multiply rationals: a/b * c/d = a*c/b*d"
  
negative.code:        (- (* (- x 1) (+ x 1)) (- (^ x 2) 1)) => 0"
    (cond ((numberp x) x)
          ((var-p x) (poly x 0 1))
          ((exp-p x)
           (apply (get-fn (expr-op x))
                  (mapcar #'prefix->canon (exp-args x))))
          (t (error "Not a polynomial: ~a" x))))
  