module comfac;   % Multivariate common factor/content routines.

% Author: Anthony C. Hearn.

% Copyright (c) 1989 The RAND Corporation.  All Rights Reserved.

symbolic smacro procedure domain!-gcd(u,v); gcdn(u,v);

symbolic smacro procedure domain!-onep u; onep u;

symbolic procedure mv!-pow!-zerop u;
   null u or zerop car u and mv!-pow!-zerop cdr u;

symbolic procedure mv!-pow!-gcd(u,v);
   if null u then nil
    else min(car u,car v) . mv!-pow!-gcd(cdr u,cdr v);

symbolic procedure mv!-content u;
   % Finds the term that is the content of u.
      if null u then nil
       else begin scalar x,y;
	 x := mv!-lc u;
	 y := mv!-lpow u;
      a: u := mv!-red u;
	 if null u or domain!-onep x and mv!-pow!-zerop y
	   then return mv!-!.!*(y,x);
	 x := domain!-gcd(x,mv!-lc u);
	 y := mv!-pow!-gcd(y,mv!-lpow u);
	 go to a
       end;

endmodule;

end;
