1

全部,

这是我需要转换为 ML 表达式的类型表达式:

int -> (int*int -> 'a list) -> 'a list

现在我知道这是一个带有 2 个参数的柯里化风格表达式:第一个参数 = 类型 int 和第二个参数 = 函数,它采用前一个 int 值两次并返回任何类型的列表

我很难弄清楚这样一个需要 aint和 return的函数'a list

我是 ML 的新手,因此这对其他人来说可能是微不足道的,但显然不是我。

任何帮助是极大的赞赏。

4

1 回答 1

1

你得到一个int和一个函数int*int -> 'a list。你应该返回一个'a list. 所以你需要做的就是调用你得到的函数 (x,x) (其中 x 是你得到的 int )并返回结果。所以

fun foo x f = f (x,x)

请注意,这不是 type 唯一可能的函数int -> (int*int -> 'a list) -> 'a list。例如函数fun foo x f = f (x, 42)fun foo x f = f (23, x)也将具有该类型。

编辑:

要使类型完全匹配,请添加类型注释以限制 f 的返回类型:

fun foo x (f : int*int -> 'a list) = f (x,x)

但是请注意,没有真正的理由这样做。此版本的行为与之前的版本完全相同,只是它只接受返回列表的函数。

于 2010-07-15T17:51:09.167 回答