LinAlg stellt Datentypen und Operationen für algebraische Vektoren und Matrizen zur Verfügung.
Vektor- und Matrixelemente können von beliebigem Typ sein, vorausgesetzt, dass eine Factory für den jeweiligen Elementtyp existiert. Zur Zeit gibt es solche Factories für Double
, Float
, Long
, Int
, Short
, Byte
und Char
.
Vektor- und Matrix-(Zeilen- und Spalten-)Indizes sind beliebige ganze Zahlen (genauer: ein Index muss im Intervall [Mindex, Maxdex]
liegen wie es im Index
-Objekt definiert ist). Es werden aber nur solche Elemente tatsächlich gespeichert, die einer Untermenge des gesamten Integer-Bereichs entsprechen (die konkreten Elemente), während alle anderen Elemente definitionsgemäß null sind (virtuelle Elemente).
Dieses Konzept (das ich vor langer Zeit im Zusammenhang mit der ALGOL68-Library-Prelude TORRIX wertzuschätzen gelernt habe) liefert nicht nur einen natürlichen Ansatz für Operationen mit Vektoren und Matrizen mit verschiedenen Indexbereichen, sondern beugt auch Index-out-of-Bounds-Exceptions vor.
Konkrete Indexbereiche (die konkreten Elementen entsprechen) werden implizit oder explizit beim Erzeugen eines Vektors oder einer Matrix zugeordnet. Standardmäßig beginnt der Bereich mit 1 und läuft bis zur Anzahl der spezifizierten Elemente, aber diese Voreinstellung lässt sich überschreiben.