<> <> <> <> <<>> DIRECTORY Polynomial USING [Ref], Rope USING [ROPE]; MultiPolynomial: CEDAR DEFINITIONS ~ BEGIN <<>> <> Ref: TYPE ~ REF MultiPolRec; MultiPolSequence: TYPE ~ RECORD [ pols: SEQUENCE length: NAT OF Ref]; MultiPolRec: TYPE ~ RECORD [terms: SEQUENCE length: NAT OF Monomial]; Monomial: TYPE ~ RECORD[ coefficient: REAL, vars: REF PoweredVariableSequence]; PoweredVariableSequence: TYPE ~ RECORD [ varList: SEQUENCE numVars: NAT OF PoweredVariable]; PoweredVariable: TYPE ~ RECORD[ variable: ATOM, degree: INTEGER]; EvaluationBindings: TYPE ~ LIST OF EvaluationBinding; EvaluationBinding: TYPE ~ RECORD[ variable: ATOM, value: REAL]; SubstitutionBindings: TYPE ~ LIST OF SubstitutionBinding; SubstitutionBinding: TYPE ~ RECORD[ variable: ATOM, replacement: Ref]; TSUBindings: TYPE ~ LIST OF TSUBinding; TSUBinding: TYPE ~ RECORD[ variable: ATOM, replacement: Polynomial.Ref]; <<>> <> <<>> Error: ERROR [reason: ErrorCode]; ErrorCode: TYPE ~ { NotUnivariate, <> NotConstant, <> BadFormat, <> UnsubstitutedVariables, <> BadVariableName, <> InternalError <> }; <<>> <> <<>> RefFromRope: PROC [rope: Rope.ROPE] RETURNS [Ref]; <> <<>> UnivariateFromRef: PROC [a: Ref, var: ATOM] RETURNS [Polynomial.Ref]; <> <<>> RefFromUnivariate: PROC [pol: Polynomial.Ref, var: ATOM] RETURNS [Ref]; <> RealFromRef: PROC [a: Ref] RETURNS [REAL]; <> RopeFromRef: PROC [a: Ref] RETURNS [Rope.ROPE]; <> <<>> <<>> <> <<>> Sum: PROC [a, b: Ref] RETURNS [Ref]; <> Difference: PROC [a, b: Ref] RETURNS [Ref]; <> Power: PROC [a: Ref, n: NAT] RETURNS [Ref]; <> Product: PROC [a, b: Ref] RETURNS [Ref]; <> Scale: PROC [p: Ref, c: REAL] RETURNS [Ref]; <> <<>> Differentiate: PROC [a: Ref, var: ATOM] RETURNS [Ref]; <> <<>> Degree: PROC [a: Ref] RETURNS [NAT]; <> <<>> <<>> <> <<>> Evaluate: PROC [a: Ref, variable: ATOM, value: REAL] RETURNS [Ref]; <> EvaluateList: PROC [a: Ref, bindings: EvaluationBindings] RETURNS [Ref]; <> TotallyEvaluate: PROC [a: Ref, bindings: EvaluationBindings] RETURNS [REAL]; <> Substitute: PROC [a: Ref, variable: ATOM, replacement: Ref] RETURNS [Ref]; <> <<>> SubstituteList: PROC [a: Ref, bindings: SubstitutionBindings] RETURNS [Ref]; <> <<>> TotallySubstituteUnivariates: PROC [a: Ref, bindings: TSUBindings] RETURNS [Polynomial.Ref]; <> <<>> <> <<>> <> <> <> <> <> <> <> <> <> <> <> <> <<>> <> <<>> <<"-x^2-y^2-z^2+2">> <<"xyzzy - 3Ab^2c^2b^3">> <<"+2y - 4y">> <<"-6.170">> <<>> END.