PolynomialJaM.mesa
Michael Plass, December 2, 1982 11:08 am
Last edit by Maureen Stone February 8, 1984 6:48:13 pm PST (Cedar5.1 and new JaM)
DIRECTORY
JaM USING [PopInt, PushInt, PushReal, PopReal, Register, RegisterInit, State],
Polynomial;
PolynomialJaM: CEDAR PROGRAM IMPORTS JaM, Polynomial =
BEGIN
State: TYPE = JaM.State;
PopPoly: PROC[s: State] RETURNS [p: Polynomial.Ref] =
BEGIN
d: NAT ← JaM.PopInt[s];
p ← Polynomial.Create[d];
FOR i:NAT IN [0..d] DO p[i] ← JaM.PopReal[s] ENDLOOP;
END;
PushPoly: PROC[s: State, p: Polynomial.Ref] =
BEGIN
d: NAT ← Polynomial.Degree[p];
FOR i:NAT DECREASING IN [0..d] DO JaM.PushReal[s,p[i]] ENDLOOP;
JaM.PushInt[s,d];
END;
PolyEval: PROC[s: State] =
BEGIN
x: REAL ← JaM.PopReal[s];
f: Polynomial.Ref ← PopPoly[s];
JaM.PushReal[s,Polynomial.Eval[f,x]]
END;
PolyAdd: PROC[s: State] =
BEGIN
g: Polynomial.Ref ← PopPoly[s];
f: Polynomial.Ref ← PopPoly[s];
PushPoly[s,Polynomial.Sum[f,g]]
END;
PolySub: PROC[s: State] =
BEGIN
g: Polynomial.Ref ← PopPoly[s];
f: Polynomial.Ref ← PopPoly[s];
PushPoly[s,Polynomial.Difference[f,g]]
END;
PolyMul: PROC[s: State] =
BEGIN
g: Polynomial.Ref ← PopPoly[s];
f: Polynomial.Ref ← PopPoly[s];
PushPoly[s,Polynomial.Product[f,g]]
END;
PolyDerivative: PROC[s: State] =
BEGIN
f: Polynomial.Ref ← PopPoly[s];
PushPoly[s,Polynomial.Derivative[f]]
END;
PolyIntegral: PROC[s: State] =
BEGIN
f: Polynomial.Ref ← PopPoly[s];
PushPoly[s,Polynomial.Integral[f]]
END;
PolyRealRoots: PROC[s: State] =
BEGIN
f: Polynomial.Ref ← PopPoly[s];
r: REF Polynomial.RealRootRec ← Polynomial.RealRoots[f];
FOR i:NAT IN [0..r.nRoots) DO JaM.PushReal[s,r[i]] ENDLOOP;
JaM.PushInt[s,r.nRoots];
END;
Init: PROC [s: State] = {
JaM.Register[s,"Polynomial.Eval",PolyEval];
JaM.Register[s,"Polynomial.Add",PolyAdd];
JaM.Register[s,"Polynomial.Sub",PolySub];
JaM.Register[s,"Polynomial.Mul",PolyMul];
JaM.Register[s,"Polynomial.Differentiate",PolyDerivative];
JaM.Register[s,"Polynomial.Integrate",PolyIntegral];
JaM.Register[s,"Polynomial.Roots",PolyRealRoots];
};
JaM.RegisterInit["PolynomialJaM", Init];
END.