anchor.diff:           (setf poly (poly*poly poly p)))))))
   
   (defun poly/ (&rest args)
  -  "Polynomial multiplication where (/ P) returns (/ 1 P) as with
  +  "Polynomial division where (/ P) returns (/ 1 P) as with
   CL::/ for numbers."
     (case (length args)
       (1 (poly/poly 1 (first args)))
  
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))))
  