Ich lerne OCaml aus dem MOOC von Université Paris Diderot angeboten. Im Moment habe ich keinen großen Kampf mit funktionalem Denken, aber ich finde diesen Code etwas hässlich. Wie kann ich es umgestalten, also kann ich allgemeine Auswertung von e1 und von e2 schreiben, die für zwei späteste Zweige der Übereinstimmungserklärung dient, die in der Vereinfachenfunktion eingeschlossen wird. Die Idee dieser Funktion besteht darin, e * 0 oder 0 * e in 0 umzuwandeln; e * 1 oder 1 * e in e; und e + 0 oder 0 + e in e.Refactor dieses Muster angepasst OCaml Stück Code
type exp =
| EInt of int
| EAdd of exp * exp
| EMul of exp * exp;;
let eval expression =
let rec aux = function
| EInt x -> x
| EAdd (e1, e2) -> (aux e1) + (aux e2)
| EMul (e1, e2) -> (aux e1) * (aux e2)
in aux expression;;
let simplify expression =
match expression with
| EInt _ -> expression
| EAdd (e1, e2) ->
let v1 = eval e1 in
let v2 = eval e2 in
if v1 = 0 then e2
else if v2 = 0 then e1
else expression
| EMul (e1, e2) ->
let v1 = eval e1 in
let v2 = eval e2 in
if v1 = 0 || v2 = 0 then EInt 0
else if v1 = 1 then e2
else if v2 = 1 then e1
else expression;;
Ich schätze Sie helfen! Danke!