我目前正在与OCaml合作开展一个小项目; 一个简单的数学表达式简化器.我应该在表达式中找到某些模式,并简化它们,以便表达式中的括号数减少.到目前为止,我已经能够实现大多数规则,除了两个,为此我决定创建一个递归的,模式匹配的"过滤器"函数.我需要实现的两个规则是:
- 将形式a - (b + c)或类似形式的所有表达式转换为a - b - c
- 将形式a /(b*c)或类似的所有表达式转换为a/b/c
...我怀疑它会相当简单,一旦我设法实现了一个,我就可以轻松实现另一个.但是,我遇到了递归模式匹配函数的问题.我的类型表达式是这样的:
type expr =
| Var of string (* variable *)
| Sum of expr * expr (* sum *)
| Diff of expr * expr (* difference *)
| Prod of expr * expr (* product *)
| Quot of expr * expr (* quotient *)
;;
Run Code Online (Sandbox Code Playgroud)
我主要遇到麻烦的是在比赛表达中.例如,我正在尝试这样的事情:
let rec filter exp =
match exp with
| Var v -> Var v
| Sum(e1, …Run Code Online (Sandbox Code Playgroud)