Dieses Beispiel stellt das Konzept einer Funktion vor, d.h. einer Gruppe von Anweisungen, die durch Angabe des Funktionsnamens in einem geeigneten Zusammenhang ausgeführt werden können. Mit Hilfe von Funktionen können Sie umfangreiche und komplexe Programme aus kleineren Modulen (Programmbausteinen) erstellen. Funktionen lassen auch die Verwendung desselben Programmtextes für ähnliche Operationen in verschiedenen Programmteilen zu.
Funktionen werden in einem Ausdruck als Name dargestellt, auf den eine öffnende Klammer folgt. (Zwischen Name und Klammer steht kein Leerzeichen.) Ein oder mehrere Ausdrücke, die als Argumente bezeichnet werden können auf die Klammer folgen. Nach dem letzten Argument muß eine schließende Klammer folgen. Diese Argumente leiten Informationen zur Verarbeitung an die Funktion weiter.
/*Definieren und Aufrufen einer
Funktion.*/
DO i = 1 to 5
SAY i quadrat (i) /*Aufruf der Funktion "quadrat"*/
END
EXIT
quadrat: /*Funktionsname*/
ARG x /*Argument abrufen*/
RETURN x**2/*qaudrieren und zurückgeben*/
Beginnend mit DO und endend auf END wird eine Schleife mit einer Indexvariablen "i" eingerichtet, die jeweils um 1 hochzählt. Die Schleife wird fünfmal durchlaufen. Die Schleife enthält einen Ausruck, der die Funktion "quadrat" aufruft, wenn der Ausdruck ausgewertet wird. Das Resultat der Funktion wird mittels des Befehls SAY angezeigt.
Die Funktion "quadrat" ist durch die Befehle ARG und RETURN definiert und berechnet die Quadratwerte. ARG ruft den Wert aus der Argumentzeichenfolge "i" ab, RETURN leitet das Resultat der Funktion zurück zum aufrufenden Befehl SAY.
Sobald die Funktion von der Schleife aufgerufen wird, sucht das Programm nach dem Funktionsnamen "quadrat:", ruft anschließend das Argument "i" ab, führt die Rechenoperation aus und kehrt zum Anfang der DO/END-Schleife zurück. Der Befehl EXIT beendet das Programm nach dem letzten Schleifendurchlauf.
Der Befehl TRACE aktiviert die Ablaufverfolgungsfunktion von ARexx.
/*Darstellung einer "Ergebnis"-Ablaufverfolgung*/
TRACE results
sum = 0 ; sumq = 0;
DO i = 1 to 5
sum = sum + 1
sumq = sumq + i**2
END
SAY `sum=' sum `sumq=' sumq
An der Konsole werden die Ausführung der Zeilen des Quellprogramms für jeden Durchlauf der DO/END-Schleife und anschließend die Endergebnisse des Ausdrucks angezeigt. Würde der Befehl TRACE entfernt, würde nur das Endergebnis angezeigt: sum = 15 sumq = 55.
Dieses Programm berechnet die Abschlußzensur für einen bestimmten Schüler auf der Basis der erzielten Noten in vier Klausuren und einer Zensur für die mündliche Beteiligung. Die Durchschnittsnote aus Klausur 1 und Klausur 2 soll 30% zur Abschlußnote beitragen, die Durchschnittsnote aus Klausur 3 und Klausur 4 soll 45% ausmachen, und die mündliche Beteiligung wird mit 25% veranschlagt. Beachten Sie, daß bei solchen Zahlenwerten der amerikanische Dezimalpunkt statt eines Kommas geschrieben werden muß.
Nachdem das Programm die Abschlußzensur angezeigt hat, fragt es den Benutzer, ob er eine weitere Note berechnen will. Die Antwort wird eingelesen ("PULL"). Lautet sie nicht Q (Quittieren = Programm verlassen), wird die Schleife fortgesetzt. Lautet die Antwort Q, wird die Schleife verlassen und der Programmablauf beendet.
/*Zensurenprogramm*/
SAY "Hallo, ich berechne die Zensur für Sie."
response = 0
DO while response (Tilde) = "Q"
/*Schleife, solange Anwort nicht Q ist*/
SAY "Bitte alle Einzelzensuren eingeben."
SAY "Klausur 1:"
PULL es1
SAY "Klausur 2:"
PULL es2
SAY "Klausur 3:"
PULL es3
SAY "Klausur 4:"
PULL es4
SAY "Mündliche Beteiligung:"
PULL p
Note = (((es1 + es2)/2*.3) + ((es3 + es4)/2*.45) + (p*.25))
SAY "Die Abschlußzensur ist" Note
SAY "Wollen Sie weitermachen? (Mit Q beenden.)"
PULL response
END
EXIT