ROPE: TYPE ~ Rope.ROPE;
VEC: TYPE ~ Vector.VEC;
BOX: TYPE ~ MathBox.BOX;
Style: TYPE ~ MathTypes.Style;
FormatClass: TYPE ~ MathTypes.FormatClass;
AtomValue: TYPE ~ MathTypes.AtomValue;
AtomBoxProc: TYPE ~ MathRules.AtomBoxProc;
AtomPaintProc: TYPE ~ MathRules.AtomPaintProc;
CompoundBoxProc: TYPE ~ MathRules.CompoundBoxProc;
CompositionProc: TYPE ~ MathRules.CompositionProc;
AtomToRopeProc: TYPE ~ MathRules.AtomToRopeProc;
Size: TYPE ~ MathRules.Size;
EXPR: TYPE ~ REF MathExprRep; -- external abstract type
MathExprRep: TYPE; -- internal concrete rep
AtomEXPR: TYPE ~ REF AtomExprRep; -- abstract
AtomExprRep: TYPE; -- concrete
CompoundEXPR: TYPE ~ REF CompoundExprRep; -- abstract
CompoundExprRep: TYPE; -- concrete
MatrixEXPR: TYPE ~ REF MatrixExprRep; -- abstract
MatrixExprRep: TYPE; -- concrete
ExprFlavors: TYPE ~ {atom, compound, matrix};
TaggedMathExpr:
TYPE ~
RECORD [
id: ATOM,
expression: EXPR
];
AtomFlavor: TYPE ~ {symbol, argument, placeholder};
AtomClass: TYPE ~ REF AtomClassRep;
AtomClassRep:
TYPE ~
RECORD [
name: ATOM, -- class identifier, e.g. $integer
formatClass: FormatClass, -- e.g. atom
flavor: AtomFlavor, -- type of atom: symbol, argument, placeholder
style: Style, -- font info
boxRule: MathRules.AtomBoxProc, -- returns info about atom size
paintRule: MathRules.AtomPaintProc, -- paints atom onto imager context
cvtRope: MathRules.AtomToRopeProc -- returns value as rope
];
CompoundClass: TYPE ~ REF CompoundClassRep;
CompoundClassRep:
TYPE ~
RECORD [
name: ATOM, -- class identifier, e.g. $product
formatClass: FormatClass, -- e.g. binaryOp
description: ROPE, -- for menu buttons, etc. to describe how expr looks, e.g. "a + b"
arguments: LIST OF Argument,
symbols: LIST OF Symbol,
boxRule: MathRules.CompoundBoxProc,
compBox: MathRules.CompositionProc,
cvtAS: ROPE ← NIL -- conversion specification to Dennis Arnon's AlgebraSystem
];
MatrixFlavor:
TYPE ~
RECORD [
class: ATOM, -- type of matrix expr, e.g. matrix or determinant
formatClass: FormatClass -- e.g. matrix
];
Other Types
Argument:
TYPE ~
RECORD [
name: ATOM, -- unique (within enclosing class) identifier for argument
aliases: LIST OF ATOM, -- aliases for name using convention $aliasFoo, $aliasBar
size: Size -- relative sizing information (big, script, etc.)
];
Symbol:
TYPE ~
RECORD[
name: ATOM, -- unique (within enclosing class) identifier for symbol
aliases: LIST OF ATOM, -- aliases for name using convention $aliasFoo, $aliasBar
size: Size, -- relative sizing information (big, script, etc.)
value: EXPR -- a symbol is an expression
];
Primitive Constructors
MakeArgument:
PROC[name:
ATOM, aliases:
LIST
OF
ATOM, size: Size]
RETURNS[Argument];
effects: constructs and returns an argument object
MakeSymbol:
PROC[name:
ATOM, aliases:
LIST
OF
ATOM, size: Size, value:
EXPR]
RETURNS[Symbol];
effects: constructs and returns a symbol object
MakeAtomClass:
PROC[name:
ATOM, formatClass: FormatClass, flavor: AtomFlavor, style: Style, boxRule: AtomBoxProc, paintRule: AtomPaintProc, cvtRope: AtomToRopeProc]
RETURNS[AtomClass];
effects: constructs and returns a new atom class object
MakeCompoundClass:
PROC[name:
ATOM, formatClass: FormatClass, description:
ROPE, args:
LIST
OF Argument, syms:
LIST
OF Symbol, boxRule: CompoundBoxProc, compBox: CompositionProc, cvtAS:
ROPE ←
NIL]
RETURNS[CompoundClass];
effects: constructs and returns a new compound class object
MakeAtomChar:
PROC[c:
CHAR]
RETURNS[AtomValue];
effects: Constructs and returns a new atom value of type char
MakeAtomRope:
PROC[r:
ROPE]
RETURNS[AtomValue];
effects: Constructs and returns a new atom value of type rope
MakeAtomBox:
PROC[b: ImagerFont.Extents]
RETURNS[AtomValue];
effects: Constructs and returns a new atom value of type box.
MakeAtomOther:
PROC[other:
REF
ANY]
RETURNS[AtomValue];
effects: COnstructs and returns a new atom value of type other
Math Expression Constructors
MakeAtomicExpr:
PROC[class:
ATOM, value: AtomValue]
RETURNS[
EXPR];
effects: constructs and returns a new atomic expression object
SIGNALS badAtomClass if class is unrecognized
MakeCompoundExpr:
PROC[class:
ATOM, args:
LIST
OF TaggedMathExpr]
RETURNS[
EXPR];
effects: constructs and returns a new compound expression object
SIGNALS badCompoundClass if class is unrecognized
SIGNALS badExprs if exprs has the wrong number or wrong type of elements
MakeMatrixExpr:
PROC[flavor: MatrixFlavor, nRows, nCols:
NAT, elements:
LIST
OF TaggedMathExpr, openSym, closeSym, space:
EXPR]
RETURNS[
EXPR];
effects: constructs and returns a new matrix expression object
SIGNALS badMatrixSize if nRows or nCols is invalid
SIGNALS badMatrix if rows has the wrong number or wrong type of elements
Selectors
GetType:
PROC[expr:
EXPR]
RETURNS[ExprFlavors];
effect: Returns atom if expr is an AtomEXPR,
Returns compound if expr is a CompoundEXPR
GetAtomClass:
PROC[expr: AtomEXPR]
RETURNS[AtomClass];
effects: Returns the class of atomic expression expr.
GetAtomExpr:
PROC[expr:
EXPR]
RETURNS[AtomEXPR];
effects: If expr.Type = atom, returns atomic expression.
Otherwise SIGNALS wrongExprType
GetValue:
PROC[expr: AtomEXPR]
RETURNS[AtomValue];
effects: Returns the value of atomic expression expr.
GetCompoundClass:
PROC[expr: CompoundEXPR]
RETURNS[CompoundClass];
effects: Returns the class of compound expression expr.
GetCompoundExpr:
PROC[expr:
EXPR]
RETURNS[CompoundEXPR];
effects: If expr.Type = compound, returns compound expression.
Otherwise SIGNALS wrongExprType
GetMatrixExpr:
PROC[expr:
EXPR]
RETURNS[MatrixEXPR];
effects: IF expr.Type[] = matrix, returns matrix expression
Otherwise SIGNALS wrongExprType
GetSubExprs:
PROC[expr: CompoundEXPR]
RETURNS[
LIST
OF TaggedMathExpr];
effects: Returns the subexpressions for compound expression expr.
GetMatrixElements:
PROC[expr: MatrixEXPR]
RETURNS[
LIST
OF TaggedMathExpr];
effects: Returns the rows of expression for matrix expression expr.
GetMatrixSize:
PROC[expr: MatrixEXPR]
RETURNS[
NAT,
NAT];
effects: Returns the size (dimensions) of expr as [nRows, nCols]
GetMatrixFlavor:
PROC[expr: MatrixEXPR]
RETURNS[MatrixFlavor];
effects: Returns the flavor of expr.
GetMatrixOpenSym:
PROC[expr: MatrixEXPR]
RETURNS[
EXPR];
effects: Returns open symbol expression of expr
GetMatrixCloseSym:
PROC[expr: MatrixEXPR]
RETURNS[
EXPR];
effects: Returns close symbol expression of expr
GetMatrixSpace:
PROC[expr: MatrixEXPR]
RETURNS[
EXPR];
effects: Returns space expression of expr