Einführung in UPN

Allgemeines

UPN steht für Umgekehrte Polnische Notation und beschreibt eine Möglichkeit, wie Ausdrücke in einen (Taschen-) Rechner eingegeben werden. Im Englischen wird der Begriff RPN (Reverse Polish Notation) verwendet.

Die Polnische Notation wurde ursprünglich 1930 von dem polnischen Logiker und Philosoph Jan Lukasiewicz (1878-1956) erfunden. Sie sieht vor, daß die auszuführende Operation vor den Argumenten anzugeben ist, auf die sie sich bezieht. Um zum Beispiel die Zahlen 3 und 12 zu summieren würde man "+ 3 12" in den Rechner eingeben.

Die Umgekehrte Polnische Notation, 1967 eingeführt von der Firma Hewlett Packard, fordert im Gegensatz dazu, daß die Operation nach den Argumenten angegeben wird, im obigen Beispiel also "3 12 +".

Die normale algebraische Notation, auch Peano-Russell-Notation genannt, lautet für dieses Beispiel "3 + 12 =".

Der Stack

Die Struktur der UPN erlaubt es vor allem auch, Zwischenergebnisse in einem sogenannten Stack zu speichern, der als Stapel-Speicher mehrere Zahlen aufnehmen kann. Als Beispiel soll der Ausdruck "sin{154/[(3+4)*(5+6)]}" berechnet werden:
 
Eingabe Stack Vorgang
154 154 Die Ziffern der Zahl 154 werden eingegeben und gelangen in den Stack.
Enter 154 
154
Um die Zahleneingabe abzuschließen bzw. die Eingabe von zwei aufeinanderfolgenden Zahlen zu trennen, muß ein spezieller Befehl vorhanden sein. Üblicherweise wird dieser "Enter" genannt. Er verdoppelt den untersten Wert im Stack und aktiviert den Ersetzungs-Modus in welchem die nächste Ziffern-Eingabe den untersten Stack-Wert überschreibt.
3 154
3
Die Zahl 3 ersetzt den untersten Stack-Wert.
Enter 154
3
3
Verdopplung und Ersetzungs-Modus.
4 154
3
4
Die Zahl 4 ersetzt den untersten Stack-Wert.
+ 154
7
Die obersten beiden Zahlen des Stack werden entfernt, addiert und das Ergebnis wird wieder in den Stack geschoben.
5 154
7
5
Die Zahl 5 wird in den Stack geschoben und "verdrängt" die 7, da der Ersetzungs-Modus nicht aktiv ist.
Enter 154
7
5
5
Verdopplung und Ersetzungs-Modus.
6 154
7
5
6
Die Zahl 6 ersetzt den untersten Stack-Wert.
+ 154
7
11
5 und 6 werden addiert.
* 154
77
7 und 11 werden multipliziert
/ 2 154 wird durch 77 dividiert
sin 0.909 Nimmt die oberste Zahl vom Stack, berechnet den Sinus (in Rad) und schiebt das Ergebnis wieder auf den Stack.

Bei diesem Beispiel fallen sofort zwei Dinge auf:

Stack & UPN in der Praxis

UPN wird überwiegend von Hewlett Packard Rechnern, aber auch ein paar wenigen anderen Modellen verwendet.

Bei den Hewlett Packard Rechnern kann der Stack üblicherweise 4 Werte speichern. Verschachtelte Rechnungen müssen deshalb unter Umständen in einer modifizierten Reihenfolge durchgeführt werden, damit der Stack nicht überläuft.

Die 4 Stack-Register werden üblicherweise X (Eingabe-Ebene), Y, Z und T genannt.

Werden Werte vom Stack genommen, so stellt sich die Frage, was mit dem T-Register geschieht. Hewlett-Packard Rechner lassen es unverändert, andere Rechner setzen seinen Wert auf 0 (z.B. Novus 4510).

Wie im obigen Beispiel nehmen zweiwertige Funktionen (wie z.B. "+") zwei Argument vom Stack und liefern ein Ergebnis zurück auf den Stack. Dies ist allerdings nicht immer so:

Verschiedene Befehle unterstützen meist die Handhabung des Stacks: So können der X- und Y-Wert vertauscht und die Stack-Inhalte nach oben oder unten durch-rotiert werden.

Manche Rechner besitzen nur 3 Stack-Register (z.B. Novus 4510) oder "unendlich" viele Stack-Register (z.B. HP-28S/C), siehe Abschnitt RPL unten.

RPL

RPL steht für Reverse Polish Lisp (wobei Lisp "List Processing" bedeutet) und wurde von Hewlett-Packard etwa 1987 eingeführt.

In RPL kann der unendlich große Stack verschiedene Objekt-Typen speichern (Zahlen, Vektoren, Matrizen, Strings usw). Dabei ist seine Größe nur durch den verfügbaren Speicher begrenzt und unbenutzte Stack-Register besitzen nicht den Wert 0 sonderen sind "leer". Sind nicht genügend Werte auf dem Stack vorhanden, um eine Operation auszuführen, so erfolgt eine Fehlermeldung.

RPL kennt allgemeine n-wertige Funktionen, die m Resultate auf dem Stack erzeugen. So kann z.B. eine Anzahl von Stack-Werten in einen Zahlen-Vektor umgewandelt werden und umgekehrt, wobei das Vektor-Objekt nur ein Register im Stack benötigt. Auch gibt es eine Speicher-Funktion, die einen Wert und einen Namen vom Stack nimmt, den Wert unter diesem Variablen-Namen abspeichert und als Ergebnis nichts auf dem Stack zurückgibt.

Im Unterschied zum 4-Ebenen-Stack erfolgt die Zahleneingabe nicht automatisch ins X-Register sondern in einer Eingabezeile, die auch das Editieren des Wertes bei Tipp-Fehlern erlaubt. Erst durch Drücken von "Enter" gelangt der Wert in das X-Register und konsequenterweise gibt es auch nicht den oben erwähnten "Ersetzungs-Modus". Zur Vereinfachung führen Operationen aber implizit ein "Enter" aus, bevor die Operation erfolgt:
 
Eingabe UPN Stack Vorgang RPL Stack Vorgang
3 3 Die Zahl 3 gelangt in das X Register. - Die Zahl 3 gelangt in den Editor.
Enter 3
3
Verdopplung und Ersetzungs-Modus. 3 Die 3 wird in den Stack geschoben.
4 3
4
Die Zahl 4 ersetzt den untersten Stack-Wert. 3 Die Zahl 4 gelangt in den Editor.
+ 7 Die obersten beiden Zahlen des Stack werden entfernt, addiert und das Ergebnis wird wieder in den Stack geschoben. 7 Ein implizites Enter wird durchgeführt, welches die 4 in den Stack schiebt. Dann wird die Addition ausgeführt.
5 7
5
Die Zahl 5 wird in den Stack geschoben und "verdrängt" die 7, da der Ersetzungs-Modus nicht aktiv ist. 7 Die Zahl 5 gelangt in den Editor.
Enter 7
5
5
Verdopplung und Ersetzungs-Modus. 7
5
Die 5 wird in den Stack geschoben.
* 7
25
5 wird quadriert. 35 Ausführen der Multiplikation.

Das Beispiel zeigt, daß manche Tastenfolgen in UPN und RPL dasselbe Ergebnis liefern, wie z.B. bei der Addition von 3 und 4. Andere Tastenfolgen liefern allerdings ein unterschiedliches Ergebnis, wie bei der Quadrierung von 5 - hier hätte im RPL-Modus vor der Multiplikation nocheinmal Enter gedrückt werden müssen, um den Wert von 5 zu duplizieren.

RPL wird verwendet bei den Rechner-Modellen HP-28C/S, HP-48GX, HP-49G und anderen.