【问题标题】:Expression evaluation tree in HaskellHaskell 中的表达式求值树
【发布时间】:2013-05-14 22:24:29
【问题描述】:

在今天的考试中,我被要求在 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 中,但它似乎不起作用。 谁能解释为什么这不起作用?

【问题讨论】:

    标签: haskell expression-trees expression-evaluation


    【解决方案1】:

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

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

    然后

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

    等等。

    :)

    【讨论】:

    • 啊啊啊啊好的,非常感谢。现在很明显,但是有多个构造函数已经让我有点困惑了。
    • 你的老师很好强迫你思考(不仅要记住):D
    猜你喜欢
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多