Reverse Polish LISP

Reverse Polish LISP

Reverse Polish LISP (RPL) ist eine stackbasierte Programmiersprache ähnlich FORTH, die in den Hewlett-Packard-Taschenrechnern wie der HP-28, HP-48 und in neueren Serien wie dem HP-49 und HP-50 Verwendung findet.[1] 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 programmierten Betriebssoftware in Taschenrechnern zu finden.[2]

Hintergrund

Einer Anekdote eines der beteiligten RPL-Entwickler Dr. William Wickes zufolge, ist die Bezeichnung willkürlich gewählt.[3] 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 verschieden Taschenrechnerreihen. Komplexere Programme sind daher nicht aufwärts-, meist aber abwärtskompatibel. Es gibt zwei Dialekte der Sprache, das komfortablere User RPL und das hardwarenähere, jedoch leistungsfähigere Sys RPL.

Die Verwendung der Umgekehrt 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

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:

  • Zunächst werden die Zahlen 1 und 100 auf den Stack gelegt
  • Der Befehl FOR entfernt diese beiden Zahlen wieder vom Stack und erkennt den nachfolgenden Bezeichner I als Laufvariable der FOR-Anweisung
  • In der nächsten Zeile wird der aktuelle Wert der Variablen I auf den Stack gelegt
  • Der Befehl DISP gibt einen Wert im Display aus, wobei der Wert 1 die erste Zeile der Anzeige als Ziel der Ausgabe angibt.
  • DISP entfernt sowohl den Wert von I als auch die 1 vom Stack
  • NEXT kennzeichnet das Ende der Schleifenstruktur

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:

  • Zu Beginn des Programms wird ein Wert vom Stack geholt und von → in die temporäre Variable a verschoben. Die Variable a existiert nur so lange, wie das Programm innerhalb der inneren « » abgearbeitet wird.
  • Der Wert in der lokalen Variablen a und 1 werden auf den Stack gelegt
  • Der Vergleich > ist wie mathematische Operation (z.B. +), welche a und 1 vom Stack entfernt und statt dessen das Ergebnis des Vergleichs auf den Stack legt (0 = FALSCH, 1 = WAHR)
  • Die folgende Anweisung THEN nimmt dann das Ergebnis des Vergleichs (0 oder 1) vom Stack und setzt die Verarbeitung entweder nach THEN bis ELSE oder ab ELSE bis END fort

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

  1. http://www.hpcalc.org/hp48/docs/programming/rpl3.txt
  2. http://www.hpcalc.org/hp48/docs/programming/rplman.zip
  3. http://www.faqs.org/faqs/hp/hp48-faq/part2/

Wikimedia Foundation.

Игры ⚽ Нужна курсовая?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Reverse Polish notation — (or just RPN) by analogy with the related Polish notation, a prefix notation introduced in 1920 by the Polish mathematician Jan Łukasiewicz, is a mathematical notation wherein every operator follows all of its operands. It is also known as… …   Wikipedia

  • Lisp — Paradigmen: multiparadigmatisch: funktional, prozedural; manche Dialekte außerdem modular, objektorientiert, reflexiv Erscheinungsjahr: 1958 Designer …   Deutsch Wikipedia

  • LISP — Apparu en 1958 Auteur John McCarthy Paradigmes fonctionnel, impératif …   Wikipédia en Français

  • Lisp — Cet article concerne le langage de programmation. Pour le protocole Internet, voir Locator/Identifier Separation Protocol. Lisp …   Wikipédia en Français

  • Polish notation — Polish notation, also known as prefix notation, is a form of notation for logic, arithmetic, and algebra. Its distinguishing feature is that it places operators to the left of their operands. If the arity of the operators is fixed, the result is… …   Wikipedia

  • List Processing — LISP Paradigmen: multiparadigmatisch: funktional, prozedural; manche Dialekte außerdem modular, objektorientiert, reflexiv Erscheinungsjahr: 1958 Designer …   Deutsch Wikipedia

  • HP-48 series — The HP 48 is a series of graphing calculators using Reverse Polish notation (RPN) and the RPL programming language, produced by Hewlett Packard (HP) from 1990 until 2003. The series include the HP 48S, HP 48SX, HP 48G, HP 48GX, and HP 48G+, the G …   Wikipedia

  • RPL — Le RPL est un langage de programmation procédural inventé par Hewlett Packard en 1984 pour ses calculatrices (HP 28, 48, 49). Sommaire 1 Origine du nom 2 Fonctionnement 3 Évolution …   Wikipédia en Français

  • RPL (langage de programmation) — RPL Le RPL est un langage de programmation procédural inventé par Hewlett Packard en 1984 pour ses calculatrices (HP 28, 48, 49). Le seul nom officiel du langage est RPL, ce que de nombreux utilisateurs ont traduit par « Reverse Polish… …   Wikipédia en Français

  • HP-49 series — The HP 49G series are Hewlett Packard (HP) manufactured graphing calculators. They are the successors of the HP 48 series, one of the best selling calculator ranges among engineers, scientists, and students.There are now four calculators in the… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”