我必须编写一个计算此数据类型的函数:
datatype Expr = X
| Y
| Avg of Expr * Expr
| Mul of Expr * Expr;
我无法在以下功能中找到错误;
val rec compute => fn X => (fn x => fn y => x)
| Y => (fn x => fn y => x)
| Avg (e1, e2) => (fn x => fn y => (compute(e1 x y) + compute(e2 x y) div 2))
| Mul (e1, e2) => (fn x => fn y => (compute(e1 x y) * compute(e2 x y)));
这有什么问题?!
请帮忙吗?
答案 0 :(得分:3)
首先,您遇到语法错误:第一个=>
应该是=
(val
声明的一部分)。
其次,你将括号放在对compute
的递归调用中是错误的:你用一个参数调用它(这是将e1
应用于两个参数x
的结果。 1}}和y
)。
这是一个应该有效的表格:
val rec compute =
fn X => fn x => fn y => x
| Y => fn x => fn y => x (* you probably meant y? *)
| Avg (e1, e2) => fn x => fn y => compute e1 x y + compute e2 x y div 2
| Mul (e1, e2) => fn x => fn y => compute e1 x y * compute e2 x y
如果使用fun
语法的句法缩写,它会变得更好一些:
fun compute X x y = x
| compute Y x y = y
| compute (Avg (e1, e2)) x y = compute e1 x y + compute e2 x y div 2
| compute (Mul (e1, e2)) x y = compute e1 x y * compute e2 x y
这是(大多数)等效的定义。