2013-05-20 78 views
7

在今天的考試中,我被要求在Haskell中創建表達式評估樹。 通常的答案是簡單的: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中,但它似乎不起作用。 任何人都可以解釋爲什麼這不起作用?

回答

13

必須定義一個數據構造器(提供姓名)

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

然後

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

等。

:)

+0

Ahhhhhh好的,非常感謝。現在很明顯,但有多個構造函數已經讓我有點困惑。 –

+4

你的老師很好的強迫你去思考(不僅要記住):D – josejuan