20

我有下面的功能,它的工作原理:

(fn x => x * 2) 2; 

但这一个不起作用:

(fn x y => x + y ) 2 3;

谁能告诉我为什么?或者给我一些提示让它工作?

4

3 回答 3

34

(fn x => fn y => x+y) 2 3;作品。fn根本没有相同的语法糖来定义fun具有的柯里化函数。

于 2010-03-13T02:25:43.637 回答
2

在标准 ML 中,一个函数只能有一个参数,所以使用

(fn (x,y) => x + y) (2,3) 

类型是

fn: int * int -> int

此时 (x,y) 和 (2,3) 是一个列表结构,

于 2014-02-09T12:30:38.003 回答
2

上面发布的答案是正确的。SML 函数接受一个参数。因此,SML 函数只能具有以下两种输入类型之一:

1) t = (t1 * t2 * ... * tN), 对于一些 N

2) t = a, 对于一些a.

因此,从技术上讲,SML将产品类型一元类型作为函数的参数。人们可以更普遍地将其视为一元类型或某些产品类型的投影。

为了匿名函数中进行柯里化,请随意将它们嵌套在彼此内部: fn x1 => fn x2 => ... fn xN => ...

我认为知道 : fun a = fn x1 => fn x2 => ... fn xN => ...是语法糖的完全扩展也很重要:fun a x1 x2 .. xN

于 2017-08-17T01:11:27.367 回答