【发布时间】:2016-10-23 03:47:06
【问题描述】:
我正在通过巴黎狄德罗大学提供的 MOOC 学习 OCaml。目前我还没有遇到函数式思维的主要困难,但我确实觉得这段代码有点难看。我如何重构它,这样我就可以编写 e1 和 e2 的一般评估,用于简化函数中包含的 match 语句的两个最新分支。这个函数的思想是将e * 0或0 * e转化为0; e * 1 或 1 * e 变成 e;和 e + 0 或 0 + e 成 e。
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;;
感谢您的帮助! 谢谢!
【问题讨论】:
标签: functional-programming pattern-matching ocaml