DIRECTORY Rope USING [ROPE], IO USING [STREAM], BigCardinals, RatNums; Polynomials: CEDAR DEFINITIONS = BEGIN OPEN BC: BigCardinals, RN: RatNums; PolynomialClass: TYPE = { constant, nonconstant }; Polynomial: TYPE = REF PolynomialRec; PolynomialRec: TYPE = RECORD [ numVars: CARDINAL, -- 0 <=> constant variant data: SELECT type: PolynomialClass FROM constant => [ value: RN.RatNum ], nonconstant => [ leadingTerm: Term, reductum: Polynomial], ENDCASE ]; Term: TYPE = RECORD [ exponent: CARDINAL, coefficient: Polynomial ]; ZeroPoly: Polynomial = NIL; DPolynomial: TYPE = LIST OF DTerm; DTerm: TYPE = RECORD [ coefficient: RN.RatNum, degreeVector: DegreeVector ]; DegreeVector: TYPE = LIST OF CARDINAL; ZeroDPoly: DPolynomial = NIL; VariableList: TYPE = LIST OF Rope.ROPE; PolynomialAdd: PROC [in1, in2: Polynomial] RETURNS [out: Polynomial]; PolynomialNegate: PROC [in: Polynomial] RETURNS [out: Polynomial]; PolynomialSubtract: PROC [in1, in2: Polynomial] RETURNS [Polynomial]; PolynomialMultiply: PROC [in1, in2: Polynomial] RETURNS [out: Polynomial]; UnivariateMonomial: PROC [coeff: RN.RatNum, exp: CARDINAL] RETURNS [out: Polynomial]; MultivariateMonomial: PROC [coeff: Polynomial, exp: CARDINAL] RETURNS [out: Polynomial]; MakePolynomialZero: PROC RETURNS [out: Polynomial _ ZeroPoly]; ReadVariableList: PROC [in: IO.STREAM] RETURNS [V: VariableList]; VariableListFromRope: PROC [in: Rope.ROPE] RETURNS [V: VariableList]; VariableListToRope: PROC [V: VariableList] RETURNS [out: Rope.ROPE]; WriteVariableList: PROC [V: VariableList, out: IO.STREAM]; ReadDPolynomial: PROC [in: IO.STREAM, V: VariableList] RETURNS [poly: DPolynomial]; DPolynomialFromRope: PROC [in: Rope.ROPE, V: VariableList] RETURNS [out: DPolynomial]; DPolynomialToRope: PROC [in: DPolynomial, V: VariableList] RETURNS [out: Rope.ROPE]; WriteDPolynomial: PROC [in: DPolynomial, V: VariableList, out: IO.STREAM]; PolyFromDPoly: PROC [in: DPolynomial, V: VariableList] RETURNS [out: Polynomial]; DPolyFromPoly: PROC [in: Polynomial, V: VariableList] RETURNS [out: DPolynomial]; ReadPolynomial: PROC [in: IO.STREAM, V: VariableList] RETURNS [poly: Polynomial]; PolynomialFromRope: PROC [in: Rope.ROPE, V: VariableList] RETURNS [out: Polynomial]; PolynomialSAC2RepToRope: PROC [in: Polynomial] RETURNS [out: Rope.ROPE]; PolynomialToRope: PROC [in: Polynomial, V: VariableList] RETURNS [out: Rope.ROPE]; WritePolynomial: PROC [in: Polynomial, V: VariableList, out: IO.STREAM]; END. šPolynomials.mesa Last Edited by: Arnon, June 10, 1985 4:19:22 pm PDT ***** Data Structure ***** the terms of a nonconstant polynomial are expected to be listed in order of decreasing exponent, thus the reductum of a polynomial (if nonzero) is expected to be a polynomial in the same number of variables, of lower degree. the zero polynomial is represented as the empty list the zero polynomial is represented as the empty list ***** Arithmetic ***** ***** Constructors ***** Construct Polynomial representation for zero ***** Conversion and I/O ***** Variable Lists Distributed Polynomials Recursive Polynomials If needed: an inline, converting the rope to a stream (IO.RIS), then calling ReadPolynomial. MessageRope is the result of ROS'ing a newly created MessageStream passed in to ReadPolynomial. Dump the internal representation in SAC2 list format A reasonable format Write in a reasonable format Κ^˜Jšœ™J™3J˜šΟk ˜ Jšœœœ˜Jšœœœ˜J˜ J˜—J˜Jšœ œ œ˜ Jšœœœœ ˜)J˜JšΟc™J˜šœœ˜2J˜—šœ œœ˜%J˜—šœœœ˜Jšœ œž˜.šœœ˜'Jšœœ ˜!šœ:˜:Jšœα™α—Jš˜—Jšœ˜J˜—šœœœ˜Jšœ œ˜Jšœ˜Jšœ˜J˜—šœœ˜Jšœ4™4—J™Jšœ œœœ˜"šœœœ˜Jšœ œ˜Jšœ˜Jšœ˜—Jš œœœœœ˜&J˜šœœ˜Jšœ4™4J˜—š œœœœœ˜'J˜—J˜J™J˜šΟn œœœ˜EJ˜—šŸœœœ˜BJ˜J˜—šŸœœœ˜EJ˜—šŸœœœ˜JJ˜—J˜J™J˜š Ÿœœ œœœ˜UJ˜—šŸœœœœ˜XJ˜—šŸœœœ˜>Jšœ,™,J™—J™J™J™™J™—š Ÿœœœœœ˜AJ˜—šŸœœ œœ˜EJ˜—šŸœœœ œ˜DJ˜—šŸœœœœ˜:J˜—J˜šœ™J˜—š Ÿœœœœœ˜SJ˜—šŸœœ œœ˜VJ˜—š Ÿœœœœ œ˜TJ˜—šŸœœ)œœ˜JJ˜—codešŸ œœ$œ˜QK˜—KšŸ œœ#œ˜QK˜šœ™K™—š Ÿœœœœœ˜QJ˜—šŸœœ œœ˜TJšœ7œœ=œ@™½J™—šŸœœœ œ˜HJ™4J™—šŸœœ#œ œ˜RJ™J™—šŸœœ(œœ˜HJ™J™—J˜Jšœ˜—…— Ό΄