anchor.diff:  		 (+ c1 c2)))
   	 g1 g2))
   
  -(defun g+ (&rest args)
  -  "Add a series of GA objects"
  -  (reduce #'g2+ args))
  -
  -(defmethod g2- ((g1 g) (g2 g))
  -  "Subtract one GA object from another"
  -  (assert (typep g1 (type-of g2)))
  -  (mapcg #'(lambda (c1 c2)
  -	     (if (and (numberzerop c1) (numberzerop c2))		      
  -		 0
  -		 (- c1 c2)))
  -	 g1
  -	 g2))
  +;;; Subtraction
   
   (defmeth2 - ((g g) (s t))
     (+ g (- s)))
  
positive.code: 
  ;; Define other geometric products
  
  (defmacro defgp (name efn ofn nofn doc)
    "Define derived geometric product given Euclidean, orthogonal, and non-orthogonal functions."
    `(defmethod ,name ((g1 g) (g2 g))
       ,doc
       (typecase (metric g1)
         (null (,efn g1 g2))
         (vector (,ofn g1 g2 (metric g1)))
         (metric (,nofn g1 g2 (metric g1))))))
  
  (defgpe *g2e *gbe "Geometric product with Euclidean metric")
  (defgpo *g2o *gbo "Geometric product with orthogonal metric")
  
negative.code: 	 g1
  	 g2))
  
  ;;; Scalar multiplication
  
  (defmeth2 * ((g g) (s t))
    (mapcg #'(lambda (c) (* c s)) g))
  