polyhelp.sa
Generated by gen_html_sa_files from ICSI. Contact gomes@icsi.berkeley.edu for details
class POLY_WRITE
class POLY_WRITE is
str_parts(out timeC,out timeV,out power1,out power2,out ms,out me:STR) is
-- default format is "text".
str_parts("text",
out timeC,out timeV,out power1,out power2,out ms,out me);
end;
str_parts(format:STR,
out timeC,out timeV,out power1,out power2,out ms,out me:STR) is
-- $ c * x^{ m } * y^{ n } $.
-- 1 2 ~~3 4 5 6.
-- 1: ms, 6:me. ms,me: start/end of the polynomial.
-- 2: timeC: separator between coefficient and var.
-- 5:timeV: separator between vars.
-- 3: power1, 4. power2. power1, power2: start/end of exponent.
-- (type)m set ms and me
case format
when "text" then -- parts of textm.
-- 2*x*y^{3}
timeC:="*"; timeV:="*"; power1:="^{"; power2:="}";
ms:=""; me:="";
when "textm" then -- ease for apply
-- [2*x*y^{3}]
timeC:="*"; timeV:="*"; power1:="^{"; power2:="}";
ms:="["; me:="]";
when "tex","texd" then -- parts of texm.
-- 2x\,y^{3} part of LaTeX text math
timeC:=""; timeV:="\\,"; power1:="^{"; power2:="}";
ms:=""; me:="";
when "texm" then
-- $2x\,y^{3}$ LaTeX text math
timeC:=""; timeV:="\\,"; power1:="^{"; power2:="}";
ms:="$"; me:="$";
when "texdm" then
-- \[2x\,y^{3}\] LaTeX display math
timeC:=""; timeV:="\\,"; power1:="^{"; power2:="}";
ms:="\\["; me:="\\]";
when "prog","progm" then
-- 2*x*y^(3) for program
timeC:="*"; timeV:="*"; power1:="^("; power2:=")"; ms:=""; me:="";
when "prog2","prog2m" then
-- 2*x*y**(3) for program
timeC:="*"; timeV:="*"; power1:="**("; power2:=")"; ms:=""; me:="";
end;
end;
-- formSw:=Reduce;
wrCoeff(coeff:INTI, inout notFirst:BOOL, out flgSt:BOOL):STR is
-- call:
-- coeff: coefficient
-- notFiest: true if it is not the first term
-- return
-- notFirst: always true
-- flgSt: true if the coefficient is printed.
-- So needen *, if some variable is follow after this.
res:STR:="";
f:BOOL;
if coeff<0.inti then f:=true; res:=res+"-"; coeff:=-coeff;
elsif notFirst then f:=false; res:=res+"+";
end;
flgSt:=(coeff>1.inti);
if flgSt then res:=res+coeff.decimal_str; end;
notFirst:=true;
return res;
end;
wrVar( varChar:STR, deg:INT, last:BOOL, inout flgSt:BOOL):STR is
res:STR:="";
pw1::="^{"; pw2::="}";
if deg.is_zero then
if (~flgSt)and last then res:=res+"1"; end;
else
if flgSt then res:=res+"*"; end;
flgSt:=true;
res:=res+varChar;
if (deg.is_neg)or(1.int<deg) then
res:=res+pw1+deg.str+pw2;
end;
end;
return res;
end;
end; -- class POLY_WRITE
class POLY_COEFF
class POLY_COEFF is
AllocCP(maxDeg:CARD):ARRAY{POLYS_INTI} pre (maxDeg>=0) is
-- array of (x+1)^n
pw::=POLYS_INTI::gen_func(|(1).inti,1.inti|);
res:ARRAY{POLYS_INTI}:=#(maxDeg+1);
res[0]:=POLYS_INTI::one;
loop i::=1.upto!(maxDeg); res[i]:=res[i-1]*pw; end;
return res;
end;
AllocCN(maxDeg:CARD):ARRAY{POLYS_INTI} pre (maxDeg>=0) is
-- array of (x-1)^n
pw::=POLYS_INTI::gen_func(|(-1).inti,1.inti|);
res:ARRAY{POLYS_INTI}:=#(maxDeg+1);
res[0]:=POLYS_INTI::one;
loop i::=1.upto!(maxDeg); res[i]:=res[i-1]*pw; end;
return res;
end;
AllocCQ(maxDeg:CARD):ARRAY{POLYS_INTI} pre (maxDeg>=0) is
-- array of (x-2)^n
pw::=POLYS_INTI::gen_func(|(-2).inti,1.inti|);
res:ARRAY{POLYS_INTI}:=#(maxDeg+1);
res[0]:=POLYS_INTI::one;
loop i::=1.upto!(maxDeg); res[i]:=res[i-1]*pw; end;
return res;
end;
end; -- class POLY_COEFF