Maple kennt, wie andere Programmiersprachen auch, den Datentyp Feld (array). Ein Feld ist eine Ansammlung von Objekten, die über den gleichen Namen und Indizes angesprochen werden. Felder werden häufig bei der Programmierung verwendet. Maple benutzt Felder außerdem in der linearen Algebra als Matrizen.
Felder (auch mehrdimensionale) werden grundsätzlich mit dem Befehl array angelegt. Der Befehl
> a := array( 1..3 ) ;
legt zum Beispiel ein Feld mit dem Namen a und drei Elementen an. Die Elemente werden über den Index angesprochen, der in eckige Klammern gesetzt wird, in diesem Fall also a[1], a[2] und a[3]. Mit dem obenstehenden Befehl sind zunächst keine Werte für die Feldelemente vergeben worden.
![]() |
Grundsätzlich können als Indizes alle ganzen Zahlen verwendet werden. Aber nur Felder, deren Indizes mit eins beginnen, können gleichzeitig als Matrix benutzt werden! |
Der Befehl array kann auch mehrdimensionale Felder angelegen. Zu diesem Zweck werden mehrere Index-Bereiche nacheinander angegeben.
> b := array( 1..3, 1..5 );
erzeugt zum Beispiel ein zweidimensionales Feld.
Mit dem Befehl array können den Feldelementen gleichzeitig mit dem Anlegen des Feldes Werte zugewiesen werden. Die Werte der Feldeinträge müssen zu diesem Zweck als Liste an die Indexbereiche angeschlossen werden. Als Feldelemente sind alle Datentypen erlaubt.
> c := array ( 1..3, [1,2] ) ;
Dieser Befehl belegt die ersten beiden Feldelemente mit Werten. Das Feldelement c[3] bleibt unbelegt.
Bei mehrdimensionalen Feldern müssen die Werte in Form einer geschachtelten Liste angegeben werden. Der folgende Befehl definiert ein zweidimensionales Feld, wobei alle Elemente mit Werten belegt werden. Die Listen in der Liste erzeugen die Reihen des Feldes.
> d:= array ( 0..1, 0..1, [[1,2],[3,4]] ) ;
Feldelemente können natürlich auch durch eine "normale" Zuweisung belegt werden:
> c[3] := x+y/2 ;
Die Befehle print und eval geben die Feldelemente aus.
![]() |
Durch eine Zuweisung der Art a[1]:= 2, ohne den Befehl array, wird kein Feld definiert. Es entsteht ein anderer Datentyp, eine Tabelle. Felder können nur mit array oder matrix definiert werden. |
![]() |
Anlegen von Feldern |
Wenn die Elemente eines Feldes einer speziellen Bildungsvorschrift genügen, kann diese beim Aufruf des Befehls array angegeben werden. Dadurch wird außerdem -besonders bei großen Feldern- Speicherplatz gespart.
Folgende Indexierungsfunktionen sind vordefiniert:
identity | In der Hauptdiagonalen stehen Einsen, sonst 0. |
diagonal | Alle Elemente, die nicht auf der Hauptdiagonalen liegen, sind 0. |
sparse | Alle Elemente sind 0. |
symmetric | Elemente mit gleichen Indizes in unterschiedlicher Reihenfolge werden gleichgesetzt (Spiegelung an der Hauptdiagonalen). |
antisymmetric | Die Elemente der Hauptdiagonalen sind 0. Alle anderen Elemente werden gespiegelt und mit entgegengesetzten Vorzeichen versehen. |
![]() |
Ein symmetrisches Feld |
![]() |
Felder weichen von dem Konzept der vollständigen Auswertung ab. Mit dem Aufruf des Feldnamen als Befehl gibt Maple nicht den Inhalt des Feldes wieder. Zur Ausgabe der Werte sind die zusätzlichen Befehle eval und print nötig. |
Die Feldvariable enthält nicht direkt die Werte der Feldelemente, wie das bei anderen Datentypen der Fall ist. Statt dessen besteht der Inhalt einer Feldvariablen lediglich aus einem Verweis, der seinerseits auf die eigentlichen Feldelemente deutet.
Felder funktionieren also im Prinzip so, wie aus anderen Programmiersprachen bekannte Zeiger!
Diese Abweichung vom Konzept der vollständigen Auswertung fällt an zwei Stellen besonders auf:
Mit dem Aufruf des Feldnamens wird nicht der Inhalt des Feldes angezeigt (sondern nur der Verweis darauf)! Der Inhalt eines Feldes kann nur mit eval oder print angezeigt werden.
Durch feld2 := feld1 wird keine Kopie von feld1 angelegt, sondern beide Felder weisen auf denselben Inhalt. Tatsächlich wird nur der Verweis auf die Feldelemente kopiert, so daß beide Felder auf dieselben Feldelemente zeigen! Wird eines der beiden Felder verändert, ist diese Änderung in beiden Feldern wirksam.
Um eine Kopie eines Feldes anzulegen, muß der Befehl copy benutzt werden.
![]() |
Kopieren eines Feldes |
Tabellen können im Gegensatz zu Feldern beliebige Indizes haben und sind jederzeit beliebig erweiterbar.
Tabellen werden implizit mit einer Zuweisung auf eine indizierte Variable angelegt. Der folgende Befehl definiert eine Tabelle mit einem Element (kein Feld!):
tab1[1] := 2 ;
Der Befehl table legt eine Tabelle explizit an, wobei die Werte in zwei Varianten festgelegt werden können. Die erste Variante ist eine einfache Liste. Als Indizes werden dabei die natürlichen Zahlen beginnend mit eins benutzt:
tab2 := table( [sin(x), 29] );
Dies definiert eine Tabelle mit den Einträgen tab2[1]=sin(x) und tab2[2]=29.
Sind andere Indizes erwünscht, ist die zweite Variante erforderlich. Dabei werden die Indizes mit ihren Werten als Gleichungen in der Liste angegeben:
tab3 := table( [pi=0, 1/2*pi=1] );
Indexierungsfunktionen für Tabellen sind wie bei Feldern möglich.
![]() |
Anlegen von Tabellen und eine Anwendung |