我有下面的功能,它的工作原理:
(fn x => x * 2) 2;
但这一个不起作用:
(fn x y => x + y ) 2 3;
谁能告诉我为什么?或者给我一些提示让它工作?
(fn x => fn y => x+y) 2 3;
作品。fn
根本没有相同的语法糖来定义fun
具有的柯里化函数。
在标准 ML 中,一个函数只能有一个参数,所以使用
(fn (x,y) => x + y) (2,3)
类型是
fn: int * int -> int
此时 (x,y) 和 (2,3) 是一个列表结构,
上面发布的答案是正确的。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