structure Reduce :> Reduce = struct local open Expr in fun negate (Neg e) = e | negate e = Neg e fun reduce (Neg (Neg e)) = e | reduce (Neg e) = negate (reduce e) | reduce (Plus (Cst 0, e2)) = reduce e2 | reduce (Plus (e1, Cst 0)) = reduce e1 | reduce (Plus (e1, e2)) = Plus (reduce e1, reduce e2) | reduce e = e endend
structure Reduce :> Reduce = struct
local open Expr
in
fun negate (Neg e) = e
| negate e = Neg e
fun reduce (Neg (Neg e)) = e
| reduce (Neg e) = negate (reduce e)
| reduce (Plus (Cst 0, e2)) = reduce e2
| reduce (Plus (e1, Cst 0)) = reduce e1
| reduce (Plus (e1, e2)) = Plus (reduce e1, reduce e2)
| reduce e = e
end
end