我有一个数据类型
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。