Haskell中的表达式评估树

时间:2013-05-20 11:10:35

标签: haskell expression-trees expression-evaluation

在今天的考试中,我被要求在Haskell中创建一个表达式评估树。 通常答案很简单:

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

要评估它,你只需使用如下函数:

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

但是今天,我们获得了一种数据类型:

data Op = Add
        | Sub
        | Mul

所以我假设创建了我可以做的表达式树:

data Expr = Value Integer
          | Op Expr Expr

并使用相同的eval函数。但是,我已经编写了该函数并将其加载到GHCI中,但它似乎不起作用。 谁能解释为什么这不起作用?

1 个答案:

答案 0 :(得分:14)

您必须定义数据构造函数(提供名称)

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

然后

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

等等。

:)