使用用户定义的数据类型的操作

时间:2014-09-22 07:09:29

标签: haskell

我有一个数据类型

data Expr = ExprNum Double -- constants
          | ExprVar String -- variables
          | ExprAdd Expr Expr
          | ExprSub Expr Expr
          | ExprNeg Expr -- The unary '-' operator
          | ExprMul Expr Expr
          | ExprDiv Expr Expr
          deriving Show

如果我有(3* 4 + 5)数据类型Expr 它应返回17,如果表达式包含变量:(3 * x),则应返回ExprMul (ExprNum 3) (ExprVar "x")

我试过这样做:

calculate (ExprMul a b) = a * b
calculate (ExprAdd a b) = a + b
calculate (ExprDiv a b) = a `div` b
calculate (ExprSub a b) = a - b
calculate (ExprVar a )= a
calculate (ExprNum a ) = Read a : Double

但我无法执行它。 我在这里做错了什么?

我想知道的另一件事是,如果用户输入Expr类型的值,我需要将其转换为字符串格式,即,如果用户输入为

ExprAdd (ExprNum 1) (ExprVar "x")

我希望得到如下输出

1+x

我尝试使用Read,但我无法执行它。

请有人可以帮忙.Thankyou。

0 个答案:

没有答案