1. Base Reference Document
OpenAxiom is a descendent of the AXIOM computer algebra system as described by Richard Jenks and Robert Sutor in AXIOM: The Scientific Computation System. That book is the base reference document for OpenAxiom.
2. Changes From The Base Document
2.1. OpenAxiom-1.4.0
This release introduces the following changes from the base document2.1.1 Interpreter
2.1.2. Compiler
- The compiler now accepts interpreter-style unnamed functions.
- The compiler now generate far better (Lisp) codes for Spad libraries or scripts. The compiler now applies more aggressive (but sound) optimizations, including domain inlining, type propagations.
- The compiler now accepts interpreter-style unnamed functions.
- Parameterized macros are now supported by the compiler.
- The compiler now support exception handling. In particular,
the
try/finallyprogramming construct was added to support reliable resource management (e.g. opening/closing or creating/removing files.)
2.1.3. Algebra
In addition to novelties in OpenAxiom-1.3.0, the following types have been added to OpenAxiom-1.4.0:- The category
BooleanLogichas been added. It is now extended byPropositionalLogicandBitAggregate. The domainSingleIntegernow satisfiesBooleanLogic. - It it now possible to obtain the string representation of
a
DoubleFloatvalue. The functionstring: DoubleFloat -> %was added to the domainString - A function
matrixis now exported by the categoryMatrixCategoryto allow construction of matrices whose entries can be succinctely described by a function. For instance, the 4-by-4 Hilbert matrix may be expressed asm: Matrix Fraction Integer := matrix(4,4,(i,j) +-> 1/(i+j))Note that the third argument is a function that computes the value of the(i,j)th entry. - The category
StringCategorywas removed as it was essentially redundant with the categoryStringAggregate. - The category
MappingCategoryis now part of the algebra as a builtin category constructor. - The following operators
less?: (%,NonNegativeInteger) -> Boolean more?: (%,NonNegativeInteger) -> Boolean size?: (%,NonNegativeInteger) -> Booleanhave been moved from the categoryAggregatetoStreamAggregatewhere they seem more appropriate. - The domain
InnerTaylorSeriesnow satisfies the categoryBiModule. - The domains
FreeModuleandOrderedFreeMonoidnow satisfy the newly addedFreeMonoidCategory. - The list of domains for OpenAxiom program manipulation has been expanded.
- Support for range and segment bindings now includes
RangeBinding.
2.1.4. Boot
Boot, the programming language used to write the OpenAxiom compiler, has been vastly improved. Lisp codes are being phased out.2.2. OpenAxiom-1.4.1
2.2.1. Algebra
The domainScriptFormulaFormat and the package
ScriptFormulaFormat1 have been removed.
2.3. OpenAxiom-1.4.2
2.3.1. Algebra
-
The function
testwas removed from the domainBoolean. - The following domains no longer implement
the exports of
OpenMathcategory:Float,Fraction,Complex,Integer,List,DoubleFloat,SingleInteger,String,Symbol. - The domain
Integerno longer satisfies the categoryConvertibleTo String. Use the functionstring: Integer -> %from the domainStringto get the string representation of an integer. - The domain
Identifierno longer satisfies the propertiesCoercibleTo SymbolandCoercibleTo String. Rather, the domainSymbolnow satisfiesRetractableTo Symboland a new operationstring: Identifier -> %has been added to the domainString. - The internal domains
IndexedStringandIndxedListwere removed. - The domain
Referencenow satisfies the categorySetCategory. In addition, the following operationselt: % -> S setelt: (%,S) -> Swere removed because they were redundant withderefandsetref, and they were sort of syntax abuse leading to hard read codes. - A new category
Dioidof canonically ordered semirings has been added. - The following categories were added:
BinaryOperatorCategoryIdempotentOperatorCategorySemiGroupOperatorCategoryMonoidOperatorCategory
- The following domains were added:
BinaryOperationSemiGroupOperationMonoidOperation
2.3.2. Compiler
- A bug in the compiler where certain functors were incorrectly
treated as forgetful was fixed. Now, functor such as
Ddefined byD(T: SetCategory): Public == Private where Public == SetCategory with makeD : T -> % Private == T add makeD x == per x(where the base domain is a paramater) are now correctly compiled as extension functors as opposed to forgetful functors. Note that an extension functor is one whose category extends the base functor's category. Any other situation is still correctly compiled as a forgetful functor. - The library compiler now allows storage class and type specifier
in a
foriterator. A storage class for a loop variable can be one oflocalorfree.- A loop variable with
localstorage class means that the variable is local to the loop. This is the default behaviour when no storage class is explicitly specified, or when only the type of the variable is specified. - A loop variable with
freestorage class means that the variable retains its last stored value at the exit of the loop. A matching declaration in an enclosing scope must be in effect.
- A loop variable with
- The library compiler now properly converts category constructors and functors to function objects where needed. In particular, they can now be used as function arguments.
- The identifier
assumeis now a considered a keyword by the library compiler. It was already a keyword in the interpreter. - A domain inlining bug has been fixed.