我有以下功能,它的工作原理:
(fn x => x * 2) 2;
但是这个不起作用:
(fn x y => x + y ) 2 3;
谁能告诉我为什么?或者给我一些暗示让它发挥作用?
(fn x => fn y => x+y) 2 3; 有效 . fn 根本没有相同的语法糖来定义 fun 具有的curried函数 .
(fn x => fn y => x+y) 2 3;
fn
fun
上面发布的答案是正确的 . SML函数只接受一个参数 . 因此,SML函数只能有两种输入类型中的一种:
1) t = (t1 * t2 * ... * tN) ,对于某些N.
t = (t1 * t2 * ... * tN)
2) t = a ,某些 a .
t = a
a
因此,从技术上讲,SML只将产品类型或一元类型作为函数的参数 . 人们通常可以将其视为一元型或一些产品类型的投影 .
为了在匿名函数中进行currying,可以随意将它们嵌套在彼此中: fn x1 => fn x2 => ... fn xN => ...
fn x1 => fn x2 => ... fn xN => ...
我认为知道这一点也很重要: fun a = fn x1 => fn x2 => ... fn xN => ... 是语法糖的全面扩展: fun a x1 x2 .. xN
fun a = fn x1 => fn x2 => ... fn xN => ...
fun a x1 x2 .. xN
在标准ML中,函数只能有 one argument ,所以使用
(fn (x,y) => x + y) (2,3)
而且类型是
fn: int * int -> int
在这个时间(x,y)和(2,3)是一个列表结构,
3 回答
(fn x => fn y => x+y) 2 3;
有效 .fn
根本没有相同的语法糖来定义fun
具有的curried函数 .上面发布的答案是正确的 . SML函数只接受一个参数 . 因此,SML函数只能有两种输入类型中的一种:
1)
t = (t1 * t2 * ... * tN)
,对于某些N.2)
t = a
,某些a
.因此,从技术上讲,SML只将产品类型或一元类型作为函数的参数 . 人们通常可以将其视为一元型或一些产品类型的投影 .
为了在匿名函数中进行currying,可以随意将它们嵌套在彼此中:
fn x1 => fn x2 => ... fn xN => ...
我认为知道这一点也很重要:
fun a = fn x1 => fn x2 => ... fn xN => ...
是语法糖的全面扩展:fun a x1 x2 .. xN
在标准ML中,函数只能有 one argument ,所以使用
而且类型是
在这个时间(x,y)和(2,3)是一个列表结构,