13 lines · 441 B · Standard ML
RawDownload
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