Na dzisiejszym egzaminie poproszono mnie o utworzenie drzewa oceny ekspresji w Haskell. Zwykle odpowiedź jest tak prosta, jak:Drzewo oceny ekspresji w Haskell
data Expr = Value Integer
| Add Expr Expr
| Sub Expr Expr
| Mul Expr Expr
I aby go ocenić, wystarczy użyć funkcji takich jak:
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
Jednak dzisiaj dostaliśmy Typ danych:
data Op = Add
| Sub
| Mul
Więc założyłem, że tworzę drzewo wyrażeń, które mogłem zrobić:
data Expr = Value Integer
| Op Expr Expr
Używaj tej samej funkcji eval
. Jednak od tej pory napisałem tę funkcję i wczytałem ją do GHCI, ale wydaje się, że nie działa. Czy ktoś może wyjaśnić, dlaczego to nie działa?
Ahhhhhh ok, dziękuję bardzo. Obecnie jest to oczywiste, ale posiadanie wielu konstruktorów już mnie trochę zdezorientowało. –
Twój nauczyciel jest dobry, zmuszając cię do myślenia (nie tylko pamiętaj): D – josejuan