Ausdruck Bewertungsbaum in Haskell

expression-evaluation expression-trees haskell

Frage

In einer Prüfung wurde ich heute gebeten, in Haskell einen Ausdrucksevaluierungsbaum zu erstellen. Normalerweise ist die Antwort so einfach wie:

data Expr = Value Integer
          | Add Expr Expr
          | Sub Expr Expr
          | Mul Expr Expr

Und um es auszuwerten, verwenden Sie einfach eine Funktion wie:

eval :: Expr -> Integer
eval (Value x) = x
eval (Add l r) = eval l + eval r
eval (Sub l r) = eval l - eval r
eval (Mul l r) = eval l * eval r

Heute erhielten wir jedoch einen Datentyp:

data Op = Add
        | Sub
        | Mul

Ich nahm an, dass ich den Ausdrucksbaum erstellen konnte, den ich gerade machen konnte:

data Expr = Value Integer
          | Op Expr Expr

Und benutze die gleiche eval Funktion. Ich habe diese Funktion jedoch geschrieben und in GHCI geladen, aber es scheint nicht zu funktionieren. Kann jemand erklären, warum das nicht funktioniert?

Akzeptierte Antwort

Sie müssen einen Datenkonstruktor definieren (einen Namen angeben)

data Expr = Value Integer | Compute Op Expr Expr
                            ^^^^^^^

dann

eval :: Expr -> Integer
eval (Value x) = x
eval (Compute Add l r) = eval l  + eval r

und so weiter.

:)



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum