我已经编写了一个数学计算器程序的一部分。我已经完成了程序的解析器,所以当用户将数学表达式键入为字符串时,我已经有办法获得以下类型的相应数据结构:
type expression =
| Term of int
| Addition of expression * expression
| Multiplication of expression * expression
| Subtraction of expression * expression
我现在需要的只是一种评估这些数据结构的方法。
- (a) 写出数学语句“3*((1 + 4)- 5)”对应的表达式。</li>
- (b) 扩展 Ocaml 数据类型以包含 Factorial 构造函数,以便它可以处理像“3*((1 + 4)!-5)”这样的表达式。</li>
- (c) 编写一个 Ocaml 函数 eval,它接受一个数学表达式并返回其(整数)值。例如,它应该返回 0 作为 (a) 部分中表达式的结果。
# let rec eval expr = ... val eval : expression -> int = <fun>
您可能想要编写一个阶乘 Ocaml 函数来帮助使用新的 Factorial 构造函数。
我对a部分感到困惑。这是什么意思let expression = 3*((1 + 4)- 5);
?
对于 b 部分,我应该遵循模式|Factorial of expression * expression
吗?