anchor.diff:           (cons (car vars1) (vars* (cdr vars1) vars2)))
           ((> (sym->val (sym (car vars1))) (sym->val (sym (car vars2))))
            (cons (car vars2) (vars* vars1 (cdr vars2))))
  -        (t (cons (make-var (sym (car vars1)) (+ (power (car vars1)) (power (car vars2))))
  +        (t (cons (make-var (sym (car vars1)) (+ (pwr (car vars1)) (pwr (car vars2))))
                    (vars* (cdr vars1) (cdr vars2))))))
  -
  -(defun make-term (coeff . vars)
  -  (list 'term coeff (sort-by-sym vars)))
  -
  -(defun coeff (term) (cadr term))
  -(defun vars (term) (caddr term))
  -
  -(defun make-var (sym power)
  -  (cons sym power))
  -
  -(defun sym (var) (car var))
  -(defun power (var) (cdr var))
   
   (defun sym->val (sym)
     (convert sym <string>))
  -
  -(defun sort-by-order (terms)
  -  (qsort (qsort terms term-sym) term-power))
  -
  -(defun term-sym (term)
  -  (sym->val (sym (car (vars term)))))
  -
  -(defun term-power (term)
  -  (power (car (vars term))))
  -
  -(defun sort-by-sym (vars)
  -  (qsort vars sym->val))
  
positive.code: (defun term* (term1 term2)
    (make-term (* (coeff term1) (coeff term2)) (vars* (vars term1) (vars term2))))
  
  (defun vars* (vars1 vars2)
    (cond ((and (null vars1) (null vars2)) '())
          ((or (null vars1) (null vars2)) (or vars1 vars2))
  
negative.code: (defun poly* (poly1 poly2)
    (make-poly (terms* (terms poly1) (terms poly2))))
  
  (defun make-term (coeff . vars)
    (list 'term coeff (sort-by-sym vars)))
  
  (defun coeff (term) (cadr term))
  (defun vars (term) (caddr term))
  
  (defun sort-by-sym (vars)
    (qsort vars sym->val))
  
  (defun terms* (terms1 terms2)
    (reduce poly+ (terms*-inner terms1 terms2)))
  