如何使用基本算法简化表达式?
答案 0 :(得分:3)
我不确定你的意思,但如果你有一个表达式数据类型,你可以定义一个递归的eval函数。在这种情况下,eval意味着简化。
例如,
data Exp = Lit Int
| Plus Exp Exp
| Times Exp Exp
eval :: Exp -> Int
eval (Lit x) = x
eval (Plus x y) = eval x + eval y
eval (Times x y) = eval x * eval y
一旦将变量添加到语言中,它就变得非常有趣,但这是表达式评估器的最基本形式。
答案 1 :(得分:1)
您可以使用此处描述的技术:http://augustss.blogspot.com/2007/04/overloading-haskell-numbers-part-2.html。使你的类型成为necassary类 - 类(Num,Fractional,Floating),以便 - ,+,*等适用于你的类型。然后,如果最终构建表达式树,您可以对其进行操作以查看可以简化的内容。
答案 2 :(得分:0)
模块Expr在哪里
- 变量由字符串命名,假定为标识符。 输入Variable = String
- 表达式的表示。 data Expr = Const Integer | Var变量 |加上Expr Expr |减去Expr Expr | Mult Expr Expr 派生(Eq,Show)
简化,例如0 * e = e * 0 = 0 并且1 * e = e * 1 = 0 + e = e + 0 = e-0 = e和 简化常数子表达式,例如,加(Const 1)(Const 2)将成为Const 3.我不希望连接变量(或变量和常量):Var“st”是Var“s”的不同变量。
他们需要像下面那样写 简化(加(Var'x')(Const 0))= Var“x”