标准 ML 静态错误
Standard ML static errors
我必须编写一个函数来计算此数据类型:
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)));
这有什么问题吗?!
有什么帮助吗?
首先,您有语法错误:第一个 =>
应该是 =
(val
声明的一部分)。
其次,您在 compute
的递归调用中放置括号是错误的:您使用单个参数调用它(这将是将 e1
应用于两个参数的结果x
和 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
这是一个(大部分)等效的定义。
我必须编写一个函数来计算此数据类型:
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)));
这有什么问题吗?!
有什么帮助吗?
首先,您有语法错误:第一个 =>
应该是 =
(val
声明的一部分)。
其次,您在 compute
的递归调用中放置括号是错误的:您使用单个参数调用它(这将是将 e1
应用于两个参数的结果x
和 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
这是一个(大部分)等效的定义。