Reverse Polish LISP (RPL, selten auch UPL[1]) ist eine stackbasierte Programmiersprache ähnlich FORTH, die in den Hewlett-Packard-Taschenrechnern wie dem HP-28, HP 48 und in neueren Serien wie dem HP-49 und HP-50 Verwendung findet.[2] Die Sprache wurde 1984 in der HP-Niederlassung in Corvallis im US-Bundesstaat Oregon entwickelt. Das Ziel war, einen Ersatz für die bis dahin üblicherweise in Assembler programmierte Betriebssoftware in Taschenrechnern zu finden.[3]

Beschreibung

[Bearbeiten | Quelltext bearbeiten]

RPL ist eine Mischung aus Forth, Lisp und Smalltalk. Forth ist stackorientiert (erst auszuführende Argumente auf den Stack, dann wird das Kommando ausgeführt, z. B. << 1 1 + >>); Lisp ist listenorientiert (erst Liste/Formel auf den Stack, dann wird von innen her aufgelöst). Z. B << '1+1' EVAL >> wird mit dem Kommando EVAL umgewandelt in << 1 1 + >>. Ebenso << 'SIN(45)' >> auf dem Stack in << 45 SIN >>.

Zusätzlich simuliert der Rechner auf dem System einen im Speicherplatz beschränkten Stack, wobei dieser tatsächlich nur aus Adressen besteht, die zum Speicherinhalt führen (indirekte Adressierung). Speicherinhalt ist dann das Objekt (Zahl, komplexe Zahl, Matrix, Formel etc.), das zum Rechnen geladen werden kann und erst am Ende auf dem Display angezeigt wird. Wird eine Stackoperation ausgeführt (z. B. SWAP=vertauschen), werden nur die Adressen im Stack verändert, nicht aber der Inhalt. Dadurch ist der Rechner sehr schnell. Am Ende der Rechnungen (nach der Garbage Collection) wird erst der neue Inhalt des Stacks durch ein internes Programm auf dem Display angezeigt.

Hintergrund

[Bearbeiten | Quelltext bearbeiten]

Einer Anekdote eines der beteiligten RPL-Entwickler Dr. William Wickes zufolge ist die Bezeichnung willkürlich gewählt.[4] Programmcode in RPL kann wie bei der umgekehrten polnischen Notation (UPN / RPN) eingegeben werden. Von Lisp hat die Sprache im Wesentlichen die Eigenschaft, Listen beliebigen Inhalts als Datentyp zu verwenden, grundlegende (Lisp-)Operationen darauf auszuführen und mit vielen RPL-Befehlen auf diesen zu operieren, wie beispielsweise:

{ 0 12,5 91,7 -43 } sin

bzw. im algebraischen Modus:

sin({0;12,5;91,7;-43})

Der Befehlsumfang unterscheidet sich bei den verschiedenen Taschenrechnerreihen. Komplexere RPL-Programme sind daher nicht abwärts-, meist aber aufwärtskompatibel. Es gibt zwei Dialekte der Sprache, das komfortablere User RPL und das hardwarenähere, jedoch leistungsfähigere Sys RPL.

Die Verwendung der umgekehrten polnischen Notation führt zu einer ungewohnten, nach der Gewöhnung aber effizienten Befehlsreihenfolge, bei der die zu bearbeitenden Daten stets vor den bearbeitenden Befehlen erfasst werden (zunächst werden Elemente auf dem Stack abgelegt, anschließend ein Operator auf sie angewandt).

Beispiel

[Bearbeiten | Quelltext bearbeiten]

Folgendes Beispielprogramm gibt die Zahlen von 1 bis 100 in der ersten Bildschirmzeile aus:

« 1 100 FOR I
   I 1 DISP
   NEXT
»

Das Programm wird vom Rechner so abgearbeitet:

In den meisten Fällen erfolgt die Übergabe von Argumenten so, dass sie zuerst auf den Stack gelegt werden und selbst Kontrollstrukturen diese Werte wie Funktionen als Argumente nehmen. Selbst Vergleiche funktionieren so:

« → a
  « IF a 1 >
    THEN a LOG
    ELSE a 1 +
    END
  »
»

Beschreibung des Beispiels:

Für die Ausführung in RPL ist es nicht relevant, wann der Vergleichswert als Argument für THEN bereitgestellt wurde. Alternativ könnte die Zeile mit dem IF auch so aussehen:

...
  « a 1 > IF
...

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. "Serie HP 48G - Benutzerhandbuch", Hewlett-Packard. Ausgabe 4 (2/1994, 10/1996), HP-Teilenummer 00048-90127, Erstveröffentlichung: 07/1993.
  2. http://www.hpcalc.org/hp48/docs/programming/rpl3.txt
  3. http://www.hpcalc.org/hp48/docs/programming/rplman.zip
  4. http://www.faqs.org/faqs/hp/hp48-faq/part2/