2013-05-20 3 views
7

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

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

Und es zu bewerten, müssen Sie nur eine Funktion verwenden, wie zum Beispiel:

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 

aber heute waren wir einen Datentyp gegeben:

data Op = Add 
     | Sub 
     | Mul 

Also nahm ich an, den Ausdruck Baum zu erstellen, den ich gerade tun konnte:

data Expr = Value Integer 
      | Op Expr Expr 

Und verwenden Sie 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?

Antwort

13

Sie müssen einen Daten Konstruktor (vorausgesetzt, einen Namen)

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 definieren.

:)

+0

Ahhhhhh ok, vielen Dank. Das ist jetzt offensichtlich, aber schon mehrere Konstruktoren haben mich ein bisschen verwirrt. –

+4

Ihr Lehrer ist gut, zwingt Sie zum Nachdenken (nicht nur erinnern): D – josejuan

Verwandte Themen