Как я могу упростить основное арифметическое выражение?
, например
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
и упрощение постоянных подвыражений, например, Плюс (Const 1) (Const 2) станет Const 3. Я бы не ожидал, что переменные (или переменные и константы) будут объединены: Var "st" является отличной переменной от Var "s".
Чего я хочу добиться, так это создать модуль, подобный приведенному выше, который использует функцию с именем simplify :: Expr->Expr