如何简化基本的算术表达式?如何简化基本的算术表达式?
例如
module ExprOps where
simplify :: Expr -> Expr
simplify (Plus(Var"x") (Const 0)) = Var "x"
我该怎么办?
module Expr where
-- Variables are named by strings, assumed to be identifiers.
type Variable = String
-- Representation of expressions.
data Expr = Const Integer
| Var Variable
| Plus Expr Expr
| Minus Expr Expr
| Mult Expr Expr
deriving (Eq, Show)
我心目中的简化是:
0*e = e*0 = 0
1*e = e*1 = 0+e = e+0 = e-0 = e
和简化不断子表达式,如Plus(Const 1)(Const 2)将变为Const 3.我不希望将变量(或变量和常量)连接在一起:Var“st”是Var“s”中的一个独特变量。
我想实现的是创建一个像上面说的一个模块使用一个叫做这里simplify :: Expr->Expr
@ user41000提供的示例只有两个孩子。例如,我将它扩展到2个以上的术语时需要考虑什么:simplify(Plus(Plus(Const 2)(Const 1))(Const 3))= Const 6。递归如何在这里工作? – plopd 2014-12-11 12:26:27