Sml 标准ML静态误差

Sml 标准ML静态误差,sml,ml,Sml,Ml,我必须编写一个计算此数据类型的函数: 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(

我必须编写一个计算此数据类型的函数:

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

这是一个(大部分)等价的定义。

首先,您有一个语法错误:第一个
=>
应该是
=
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

这是一个(大部分)等价的定义。

首先,您有一个语法错误:第一个
=>
应该是
=
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

这是一个(大部分)等价的定义。

首先,您有一个语法错误:第一个
=>
应该是
=
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

这是一个(基本上)等价的定义。

有趣的时候很有趣有趣的时候很有趣的时候很有趣的时候很有趣的时候很有趣