anchor.diff:      (my-put 'gcd '(polynomial polynomial)
   	    #'(lambda (p1 p2) (tag (gcd-poly p1 p2))))
       (my-put 'reduce '(polynomial polynomial)
  -	    #'(lambda (p1 p2) (tag (reduce-poly p1 p2))))
  +	    #'(lambda (p1 p2) (mapcar #'(lambda (p) (tag p))
  +				      (reduce-poly p1 p2))))
       ;;2.87 add =zero?
       (my-put '=zero? '(polynomial) 
   	    #'(lambda (p) (empty-termlist? (term-list p))))
  
positive.code: 
  (defun reduce-terms (n d)
    (let ((g (gcd-terms n d)))
      (list (div-terms n g)
  	  (div-terms d g))))
  
  (defun my-reduce (n d) (apply-generic 'reduce n d))
  
  
negative.code: 	     (format t "~% t1 t2 is ~A" (list (term-list p1)
  					      (term-list p2)))
  	     (if (same-variable? (variable p1) (variable p2))
  		 (mapcar #'(lambda (termlist)
  			     (make-poly (variable p1) termlist))
  			 (reduce-terms (term-list p1)
  				       (term-list p2)))
  		 (error "the p1 p2 not same var ~A" (list p1 p2))))
  	   
  	   (tag (p) (attach-tag 'polynomial p)))
  