Hinweis: Um zu testen, ob ein in einer Variablen term
gespeicherter Wert eine Liste ist, können Sie die folgende Notation verwenden: type(term)==list
liefert True
zurück, wenn term
eine Liste ist und ansonsten False
.
Definieren Sie drei Python-Funktionen zur Darstellung von Termen. Als Eingabe sollen alle Funktionen Terme erwarten, die als geschachtelte Listen dargestellt sind. Diese Darstellung der Eingabe lässt sich am einfachsten anhand eines Beispiels verdeutlichen. Der Term ((4-2)+((1/2)*3))
wird durch die folgende Liste dargestellt:
term = ["+", ["-", 4, 2], ["*", ["/", 1, 2], 3]]
Jeder Term ist also entweder eine dreielementige Liste oder eine Zahl. Im Fall komplexer Terme ist das erste Listen-Element eine Zeichenkette, die eine binäre Rechenoperation beschreibt. Das zweite und dritte Listen-Element sind jeweils Terme, die die beiden Argumente der Operation darstellen.
Definieren Sie eine Funktion infix
, die die geklammerte Infixdarstellung eines so dargestellten Terms als Zeichenkette zurückgibt. Zum Beispiel soll infix(term)
mit der obigen Definition für term
die vorher gezeigte Infixdarstellung berechnen.
Definieren Sie Funktionen prefix
und postfix
, die entsprechend die Präfix- und Postfix-Darstellung eines Terms berechnen. Diese Funktionen erwarten wie infix
einen als geschachtelte Liste dargestellten Term als Argument, sollen aber keine Zeichenkette sondern eine (nicht geschachteltes) Liste zurückliefern, wie die folgenden Aufrufe zeigen.
>>> prefix(term)
["+", "-", 4, 2, "*", "/", 1, 2, 3]
>>> postfix(term)
[4, 2, "-", 1, 2, "/", 3, "*", "+"]
Definieren Sie eine rekursive python-Funktion eval_expr
, die eine als Liste dargestellten arithmetischen Ausdruck der Form ["+", ["-", 4, 2], ["*", ["/", 1, 2], 3]]
als Argument erwartet und als Ergebnis den Wert des Ausdrucks zurückliefert. Jeder Ausdruck ist also entweder eine dreielementige Liste oder eine Zahl. Im Fall komplexer Ausdrücke ist das erste Listen-Element eine Zeichenkette, die eine binäre Rechenoperation beschreibt. Das zweite und dritte Listen-Element sind jeweils Ausdrücke, die die beiden Argumente der Operation darstellen.
Für den gezeigten Ausdruck soll die Funktion 3.5
zurückliefern.
Hinweis: Um zu testen, ob ein in einer Variablen expr
gespeicherter Wert eine Liste ist, können Sie die folgende Notation verwenden: type(expr)==list
liefert True
zurück, wenn expr
eine Liste ist und ansonsten False
.