如何簡化基本的算術表達式?如何簡化基本的算術表達式?
例如
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