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:        (- (* (- x 1) (+ x 1)) (- (^ x 2) 1)) => 0"
    (cond ((numberp x) x)
          ((var-p x) (poly x 0 1))
          ((and (exp-p x) (get (expr-op x) 'prefix->canon))
           (apply (get-fn (expr-op x))
                  (mapcar #'prefix->canon (exp-args x))))
          (t (error "Not a polynomial: ~a" x))))
  
negative.code:          (setf poly (poly*poly poly p)))))))
  
  (defun poly/ (&rest args)
    "Polynomial division where (/ P) returns (/ 1 P) as with
  CL::/ for numbers."
    (case (length args)
      (1 (poly/poly 1 (first args)))
  