Das folgende Kapitel setzt Kenntnisse einer höheren Programmiersprache voraus. Begriffe wie Rückgabewert, Parameter, lokale und globale Variable werden nicht detailliert erklärt, sondern als bekannt vorausgesetzt.
Maple macht einen begrifflichen Unterschied zwischen Funktionen und Prozeduren. Funktionen dienen ausschließlich dazu, funktionale mathematische Zusammenhänge abzubilden (siehe auch Kapitel 9).
Prozeduren können beliebige Aneinanderreihungen von Anweisungen sein. Ein funktionaler Zusammenhang kann auch über eine Prozedur definiert werden!
Viele mapleeigene Befehle sind als Prozeduren implementiert. In Kapitel 13 ist beschrieben, wie der Programmcode sichtbar gemacht werden kann.
Eine Prozedur wird durch eine Zuweisung auf eine Variable definiert. Dabei beginnt die Definition der Prozedur mit dem Schlüsselwort proc und endet mit end.
Die Parameterliste wird in Klammern hinter dem Schlüsselwort proc angegeben. Es folgt ein Deklarationsteil mit den optionalen Schlüsselworten local, global und options. Auf den Deklarationsteil folgt der Anweisungsteil mit beliebig vielen Anweisungen.
Die allgemeine Form einer Prozedur lautet also wie folgt:
prozedurname :=
proc ( par1 : typ1, ... parn : typn )
local l1, ..., ln ;
global gl1, ..., gln ;
options ... ;
command1 ; ... commandn ;
end ;
Ob zwischen den Zeilen im Deklarationsteil und im Anweisungsteil ; oder : steht, ist irrelevant. Ein ; hinter dem Schlüsselwort end bewirkt (im Gegensatz zum :), daß Maple den Programmcode wiederholt.
Der Rückgabewert einer Prozedur ist das Ergebnis des letzten Befehls. Soll die Prozedur zwischendurch eine Ausgabe liefern, muß diese mit print oder lprint erzwungen werden.
Ein alternativer Rückgabewert kann mit der Abbruchanweisung RETURN(wert) angegeben werden.
![]() |
Der Rückgabewert einer Prozedur |
Die Parameterliste hinter dem Schlüsselwort proc kann beliebig lang sein.
Wird die Prozedur mit weniger Parametern aufgerufen als in der Parameterliste gefordert sind, kommt es zu einer Fehlermeldung. Dies gilt allerdings nur, falls innerhalb der Prozedur auf diese weiteren Parameter zugegriffen wird.
Einer Prozedur können mehr Parameter übergeben werden als in der Parameterliste gefordert sind. Über args kann innerhalb der Prozedur auf die Liste der übergebenen Parameter zugegriffen werden. args[1] benennt den ersten Parameter, args[2] den zweiten und so weiter. nargs liefert die Anzahl an übergebenen Parametern.
![]() |
Parameterübergabe |
Mit der Parameterliste kann gleichzeitig eine Datentypkontrolle definiert werden. Dabei kann jedem Parameter ein gültiger Typ zugewiesen werden:
parameter:typ
oder mehrere Typen über eine Liste:
parameter:typenliste
Es sind alle gültigen Datentypen möglich. Einige Beispiele:
integer | ganze Zahl |
float | Fließpunktzahl |
fraction | Bruch |
name | Variable |
algebraic | algebraischer Ausdruck |
equation | Gleichung |
range | Zahlenbereich |
set | Menge |
list | Liste |
table | Tabelle |
array | Feld |
matrix | Matrix |
Eine vollständige Liste aller Datentypen liefert ?type.
![]() |
Typenkontrolle über die Parameterliste |
Variablen, die innerhalb der Prozedur benutzt werden, können als local oder global deklariert werden.
Lokale Variablen werden im Kopf der Prozedur mit dem Schlüsselwort local deklariert. Diese Variablen gelten nur innerhalb der Prozedur und treten nicht nach außen.
Globale Variablen werden im Kopf der Prozedur mit dem Schlüsselwort global deklariert. Sie sind für die gesamte Sitzung gültig. Über diesen Weg können auch Variablen, die bisher in der Sitzung aufgetreten sind, in einer Prozedur modifiziert werden.
![]() |
Variablen sollten in jedem Fall als lokal oder global deklariert werden, da die Releases 2, 3, und 4 nicht deklarierte Variablen unterschiedlich behandeln. |
![]() |
lokale und globale Variablen |
![]() |
Variablen werden in Prozeduren nicht wie beim interaktiven Betrieb (nämlich vollständig) ausgewertet. |
Es gelten abweichend folgende Regeln:
Eine vollständige Auswertung kann jederzeit mit eval erzwungen werden.
Zu jeder Prozedur werden eine Reihe von Verwaltungsinformationen intern abgespeichert. Auf diese Informationen kann mit
op( n, eval( prozedurname ))
mit n von 1 bis 6 zugegriffen werden.
Die wichtigste dieser Informationen ist die remember-Tabelle, die angelegt wird, wenn bei der Definition der Prozedur die Option remember angegeben wurde. In dieser Tabelle werden bisher berechnete Werte abgespeichert.
![]() |
Die fibonacci-Folge: eine rekursive Prozedur mit remember-Tabelle |
![]() |
Das Pascalsche Dreieck |