Erfunden wurde die Notation von einem polnischen Philosoph, deswegen polnisch.
HP hat die damals eingeführt, weil man mit ihr komplexe Formeln einfach in einen Taschenrechner eingeben kann und es keine Klammern und Vorrand von Operatoren (z.B. keine Punkt- vor Strichrechnung) gibt. In der Informatik wird sie auch als Postfix Notation bezeichnet, dort gibt es auch die Präfix und die Infix Notation, letztere ist die bekannte "normale" mathematische Schreibweise.
Diese drei Schreibweisen kommen von den Binärbäumen, in die die Formeln zerlegt werden können, um sie dem Rechner näher zu bringen. Dabei sind die Operanden die Blätter des Baumes und die Operatoren die Knoten zwischen den Blättern. Jeder Knoten hat einen linken und einen rechten Teilbaum, der wiederum beliebig viele Knoten und Blätter haben kann (im einfachsten Fall kann es auch ein leerer Baum sein, z.B. wenn der Knoten eine Sinus Funktion enthält, die ja bekanntlich nur einen Parameter akzeptiert). Jeder Binärbaum hat außerdem soetwas wie eine Wurzel, der oberste Knoten, der keine übergeordneten Knoten mehr hat. Dies ist sozusagen der Anfang des Baumes, beim Programmieren muß man sich nur diesen Knoten merken, denn jeder Knoten hat Verweise auf seinen linken und rechten Teilbaum, so daß also an der Wurzel alles "dranhängt".
Um eine Ergebnis aus einem fertigen Baum herauszuholen gibt es 3 verschiedene Bearbeitungsmöglichkeiten:
- präfix: werte aktuellen Knoten aus, gehe nach links, gehe nach rechts
- infix: gehe nach links, werte aktuellen Knoten aus, gehe nach rechts
- postfix: gehe nach links, gehe nach rechts, werte aktuellen Knoten aus
Da die Bearbeitung i.d.R. rekursiv erfolgt heißt das, daß für jeden Knoten die oben genannte Bearbeitungsweise angewendet wird, bis man fertig ist. D.h. bei präfix wird z.B. jeder Knoten erst ausgegeben / ausgewertet, bevor man weitergeht nach links. Erst wenn man mit dem linken Teilbaum fertig ist kommt der Rechner wieder in den aktuellen Knoten zurück und geht dann nach rechts. Bei Infix wird zuerst das äußerst linke Blatt aufgesucht und diese, da es keine Kinder mehr hat, ausgeführt.
Ein Beispiel für eine Ausgabe in infix Notation, man bemerke die Notwendigkeit sehr vieler Klammern, die ein Mensch weglassen würde, aber ein Computer nicht verhindern kann:
PHP:
function traverseInfix (curNode)
{
if (!curNode)
{
return;
}
printf ("(");
traverseInfix (curNode->left);
printf ("%s", curNode->content);
traverseInfix (curNode->right);
printf (")");
}
Beispielbaum:
Infix ausgegeben:
((1 + 2) * 3)
Postfix:
1 2 + 3 *
Bei Taschenrechnern, die eine Infix Eingabe erlauben muß der Rechner die Intelligenz besitzen Klammer selbständig zu setzen, denn kein Mensch will ständig Klammern setzen, wenn sie nicht unbedingt notwendig sind. Sie machen die Formel nur unnötig komplex und unübersichtlich. D.h. er muß wissen, wann welche Vorrangregel gilt und wie er die Werte in den Baum einzutragen hat. Die Berechnung des Ergebnisses letztendlich erfolgt mit Hilfe einer Postfix Routine (denn wenn der Baum einmal steht, dann kann ich ihn auslesen wie ich will), weil diese Methode einfach für einen Rechner die beste ist. Denn ich habe hier immer die beiden Teilergebnisse aus dem linken und rechten Baum vorliegen und kann sofort das Ergebnis bilden, bei Infix hätte ich nur das Teilergebnis aus dem linken Baum, das rechte Ergebnis müßte noch berechnet werden, geht also gar nicht. Präfix fällt ebenfalls aus, weil wie soll ich Malnehmen, ohne zu wissen was.
So und diese HP Taschenrechner haben noch nicht einmal den Baum aufbauen müssen, denn das mußte der User tun. Der mußte sich diese Postfix Notation verinnerlichen und dem Rechner die Formeln in dieser Form eingeben. Und um Eingaben dieser Art zu speichern braucht man keinen Baum, sondern lediglich einen Stack (Stapel). Dabei werden die Zahlen, Variablen und Teilergebnisse immer auf den Stack geschoben und bei Eingabe eines Operators wurden sie gleich wieder vom Stack geholt um verarbeitet zu werden. Das Ergebnis wurde dann wieder auf den Stack gelegt, um weiterverarbeitet zu werden. D.h. der Rechner muß nur noch die Operatoren kennen und wissen, wieviele Werte er für welchen Operator vom Stack holen muß (z.B. für + 2, für sin 1, usw.) und schon kann er loslegen.
1 2 + 3 * bedeutet also
1 -> Stack (1)
2 -> Stack (2 1)
+ -> 2 vom Stack, 1 vom Stack, addieren -> Stack (3)
3 -> Stack (3 3)
* -> 3 vom Stack, 3 vom Stack, multiplizieren -> Stack (9)
= -> 9 vom Stack ->Ergebnis anzeigen
Abschliessend kann man sagen: weil die es damals aufgrund der Rechenleistung nicht hinbekommen haben einen gescheiten Parser für komplexe Formeln zu basteln, haben sie die Aufgabe einfach an den User abgetreten. Diese konnten dann zwar mit einem superteueren Rechner angeben, haben aber dann heimlich ganz schön geflucht, weil die Notation doch schon ein bißchen gewöhnungsbedürftig ist.

Denn ein teurer Taschenrechner macht noch keine Leuchte, oder a fool with a tool is still a fool.
