8

今日の試験で、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 にロードしましたが、動作していないようです。これが機能しない理由を誰か説明できますか?

4

1 に答える 1

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

等々。

:)

于 2013-05-20T11:41:54.233 に答える