In un esame oggi mi è stato chiesto di creare un albero di valutazione delle espressioni in Haskell. Di solito la risposta è semplice come:Albero di valutazione delle espressioni in Haskell
data Expr = Value Integer
| Add Expr Expr
| Sub Expr Expr
| Mul Expr Expr
E per valutarlo, è sufficiente utilizzare una funzione come ad esempio:
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
Tuttavia oggi, ci hanno dato un tipo di dati:
data Op = Add
| Sub
| Mul
Quindi ho pensato di creare l'albero delle espressioni che potevo fare:
data Expr = Value Integer
| Op Expr Expr
E utilizzare la stessa funzione eval
. Tuttavia, da allora ho scritto quella funzione e l'ho caricata in GHCI, ma non sembra funzionare. Qualcuno potrebbe spiegare perché questo non funziona?
Ahhhhhh ok, grazie mille. Evidentemente ovvio, ma avere più costruttori mi ha già un po 'confuso. –
Il tuo insegnante ti costringe a pensare (non solo ricordare): D – josejuan