全部,
这是我需要转换为 ML 表达式的类型表达式:
int -> (int*int -> 'a list) -> 'a list
现在我知道这是一个带有 2 个参数的柯里化风格表达式:第一个参数 = 类型 int 和第二个参数 = 函数,它采用前一个 int 值两次并返回任何类型的列表
我很难弄清楚这样一个需要 aint
和 return的函数'a list
。
我是 ML 的新手,因此这对其他人来说可能是微不足道的,但显然不是我。
任何帮助是极大的赞赏。
全部,
这是我需要转换为 ML 表达式的类型表达式:
int -> (int*int -> 'a list) -> 'a list
现在我知道这是一个带有 2 个参数的柯里化风格表达式:第一个参数 = 类型 int 和第二个参数 = 函数,它采用前一个 int 值两次并返回任何类型的列表
我很难弄清楚这样一个需要 aint
和 return的函数'a list
。
我是 ML 的新手,因此这对其他人来说可能是微不足道的,但显然不是我。
任何帮助是极大的赞赏。
你得到一个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)
但是请注意,没有真正的理由这样做。此版本的行为与之前的版本完全相同,只是它只接受返回列表的函数。