查询ML中的类型表达式

时间:2010-07-15 17:44:58

标签: functional-programming types sml

所有

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

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

现在我知道这是一个currying样式表达式,它有两个参数: 第一个参数=类型int 和第二个参数=将前一个int值取两次并且返回任何类型的列表的函数

我很难找到需要int并返回'a list的功能。

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

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

fun foo x f = f (x,x)

请注意,这不是类型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)

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