Symmetrica was written in the programming language C. The design of the routines was in a object oriented way.

In Symmetrica there is only one type of object. One component of the object is a tag identifying the specific kind of object. Using this tag the (meta-) routines (e.g. mult) switch to the specific routine (e.g. mult_permutation).

The advantage of this method is that we only have one routine for different kind of objects. So is the routine for the inversion of a matrix independent of the objects inside the matrix. We only need a routine to invert the entries.
But we have a overhead in the object to store the tag, and a overhead in runtime to switch to the specific routine. This method is simliar to virtual classes in C++.

Now a complete listing of available types of objects.

redball INTEGER
redball VECTOR of arbitray objects
redball BITVECTOR 0-1 vector as bit vector
redball BRUCH fraction of two arbitrary objects
redball TABLEAUX
redball POLYNOM polynomial with arbitrary coefficents
redball SCHUR Schur function with arbitrary coefficents
redball MATRIX of arbitray objects
redball HOMSYM complete symmetric function
redball SCHUBERT Schubert polynomial
redball INTEGERVECTOR VECTOR object with INTEGER objects
redball INTEGERMATRIX MATRIX object with INTEGER objects
redball SYMCHAR charcter of the symmetric group
redball WORD
redball LIST list of arbitray objects
redball LONGINT
redball BINTREE binary tree of arbitray objects
redball POWSYM symmetric power sum
redball ELMSYM elementary symmetric function
redball KRANZ element of wreath product of symmetric groups
redball FINITEFIELD element of a finite field
redball GROUPALGEBRA element of the group algebra of a permutation group
redball REIHE series
redball MONOPOLY polynomial in one variable
redball SQ_RADICAL
redball LAURENT
redball BARPERM barred permutations

symmetrica (at) symmetrica.de

University of Bayreuth -