Man unterscheidet drei Arten von Funktionen:
Eine interne Funktion wird durch eine Sprungmarke innerhalb des Programms gekennzeichnet. Bei Aufruf der internen Funktion erstellt ARexx eine neue Speicherumgebung, damit die Umgebung der vorherigen Aufrufebene unverändert bleibt. Die neue Umgebung übernimmt die Werte ihres Vorgängers, spätere Veränderungen dieser Umgebung haben aber keine Auswirkung auf die vorherige Umgebung.
Folgende Werte werden geschützt bzw. beibehalten:
Die neue Umgebung erhält nicht automatisch eine neue Symboltabelle, so daß der aufgerufenen Funktion zunächst einmal alle Variablen aus der vorherigen Umgebung zur Verfügung stehen. Der Befehl PROCEDURE kann zum Erstellen einer eigenen Tabelle genutzt werden, wodurch die Symbolwerte der Aufrufebene geschützt werden. PROCEDURE kann auch verwendet werden um ein und denselben Variablennamen in zwei verschiedenen Bereichen mit zwei unterschiedlichen Werten verwenden zu können.
Die Ausführung der internen Funktion wird fortgesetzt, bis ein RETURN-Befehl ausgeführt wird. An dieser Stelle wird die neue Umgebung wieder inaktiviert, und die Steuerung kehrt zu dem Punkt zurück, an dem der Funktionsaufruf erfolgte. Der mit dem Befehl RETURN angegebene Ausdruck wird ausgewertet und als Funktionsergebnis an die Aufrufebene zurückgeleitet.
Als Bestandteil des Sprachsystems bietet ARexx eine umfangreiche Bibliothek vordefinierter Funktionen. Diese Funktionen sind stets verfügbar und auf die Zusammenarbeit mit den internen Datenstrukturen optimal zugeschnitten. Im allgemeinen laufen die integrierten Funktionen wesentlich schneller ab als entsprechende interpretierte Funktionen. Aus diesem Grund wird die Verwendung dringend empfohlen.
Manche integrierte Funktionen erstellen und verwalten externe AmigaDOS-Dateien. Auf Dateien wird über einen logischen Namen Bezug genommen. Bei diesem Namen, der einer Datei beim erstmaligen Öffnen zugeordnet wird, wird zwischen Groß- und Kleinschreibung unterschieden. Die ursprünglichen Ein- und Ausgabedatenströme erhalten die Namen STDIN (Standardeingabe) und STDOUT (Standardausgabe). Theoretisch können beliebig viele Dateien gleichzeitig geöffnet sein, allerdings ist der verfügbare Arbeitsspeicher natürlich nicht unendlich groß, so daß Sie irgendwann an dessen Grenzen stoßen, wenn sie "unendlich viele" Dateien zu öffnen versuchen. Beim Verlassen des Programms werden alle geöffneten Dateien automatisch geschlossen.
Eine Funktionsbibliothek (engl. shared Library) ist eine Sammlung einer oder mehrerer Funktionen, die als gemeinsam benutzbare Amiga-Bibliothek aufgebaut ist. Die Bibliothek muß in LIBS: gespeichert sein, gleich ob festplatten- oder speicherresident. Festplattenresidente Bibliotheken werden bei Bedarf geladen und geöffnet.
Die Bibliothek muß spezielle für die Verwendung durch ARexx zugeschnitten sein. Jede Funktionsbibliothek muß einen Bibliotheksnamen, eine Suchpriorität, eine relative Einstiegsposition und eine Versionsnummer besitzen. Wenn ARexx nach einer Funktion sucht, öffnet der Interpreter jede einzelne Bibliothek und prüft den "query"-Einstiegspunkt. Dieser Einstiegspunkt muß als ganzzahlige Position (z.B. "-30") relativ zur Bibliotheksbasis vorliegen. Der Rückgabewert des Abfrageaufrufs gibt an, ob die gewünschte Funktion gefunden wurde. Wenn ja, wird sie mit den vom Interpreter übergebenen Parametern aufgerufen, und das Funktionsergebnis wird an die Aufrufebene zurückgegeben. Wird sie nicht gefunden, wird ein Fehlercode für "Funktion nicht gefunden" zurückgemeldet, und die Suche wird in der nächsten Bibliothek auf der Liste fortgesetzt. Funktionsbibliotheken werden nach der Überprüfung stets geschlossen, so daß das Betriebssystem bei Bedarf wieder über den Hauptspeicherplatz verfügen kann.
Der residente ARexx-Prozeß verwaltet eine Liste der zur Zeit verfügbaren Funktionsbibliotheken und Funktions-Hosts (s.u.): die sog. Bibliotheksliste. Anwendungsprogramme können bei Bedarf Funktionsbibliotheken hinzufügen oder entfernen.
Die Bibliotheksliste wird als eine nach Prioritätswerten sortierte Listenstruktur verwaltet. Jeder Eintrag besitzt einen ihm zugeordneten Suchprioritätswert von 100 (höchste Priorität) bis -100 (niedrigste Priorität). Einträge können mit einer geeigneten Priorität hinzugefügt werden, um die Auflösung des Funktionsnamens zu steuern. Bibliotheken mit höheren Prioritätswerten werden zuerst durchsucht. Innerhalb einer vorgegebenen Prioritätsebene werden die zuerst hinzugefügten Bibliotheken auch zuerst durchsucht. Die Prioritätsebenen sind von Bedeutung, wenn z.B. mehrere Bibliotheken identische Definitionen von Funktionsnamen aufweisen, da die in der Suchfolge weiter unten stehenden Funktionen sonst niemals aufgerufen werden können.
Der einem Funktions-Host zugewiesene Name ist der Name seines öffentlich zugänglichen Message-Ports. Funktionsaufrufe werden in Form eines Nachrichtenpakets an den Host weitergegeben. Danach stellt der jeweilige Host fest, ob er den angegebenen Funktionsnamen erkennt. Die Namensauflösung ist ein interner Host-Vorgang. Funktions-Hosts bieten ein natürliches Gateway-Verfahren zur Implementierung ferner Prozeduraufrufe an andere Maschinen innerhalb eines Netzes. Der residente ARexx-Prozeß ist ein Funktions-Host und wird in der Bibliotheksliste mit einer Priorität von -60 installiert.