标准毫升中的“=>”是什么意思?
What does "=>" mean in standard ml?
似乎是一个函数输出这个...但我找不到任何解释。
我知道 ->
用于类型,我要求对 =>
进行解释。
val twice = fn f => fn x => f(f x);
^例子
它们与关键字 fn
一起构成了 lambda 表达式,即匿名函数。在您的示例中, twice
被分配了这样一个 lambda 表达式。有更明显的括号:
val twice = (fn f => (fn x => f(f x)))
因此,twice
是一个接受函数的函数,returns 是另一个函数(另一个 lambda 表达式)。调用 lambda 表达式时,会发生与调用普通函数相同的事情:
- fun plus2 x = x + 2;
> val plus2 = fn : int -> int
- twice plus2 4
> val it = 8 : int
twice plus2
表示我们以plus2
作为参数f调用了两次,因此相当于fn x => plus2(plus2 x)
。当我们调用 4 的结果时,x
被 4
替换,导致 plus2(plus2 4)
结果为 8.
使用fun
的函数定义可以看作是将lambda表达式赋值给名字的语法糖,即下面两行是等价的:
fun foo x = x * 3
val foo = fn x => x * 3
似乎是一个函数输出这个...但我找不到任何解释。
我知道 ->
用于类型,我要求对 =>
进行解释。
val twice = fn f => fn x => f(f x);
^例子
它们与关键字 fn
一起构成了 lambda 表达式,即匿名函数。在您的示例中, twice
被分配了这样一个 lambda 表达式。有更明显的括号:
val twice = (fn f => (fn x => f(f x)))
因此,twice
是一个接受函数的函数,returns 是另一个函数(另一个 lambda 表达式)。调用 lambda 表达式时,会发生与调用普通函数相同的事情:
- fun plus2 x = x + 2;
> val plus2 = fn : int -> int
- twice plus2 4
> val it = 8 : int
twice plus2
表示我们以plus2
作为参数f调用了两次,因此相当于fn x => plus2(plus2 x)
。当我们调用 4 的结果时,x
被 4
替换,导致 plus2(plus2 4)
结果为 8.
使用fun
的函数定义可以看作是将lambda表达式赋值给名字的语法糖,即下面两行是等价的:
fun foo x = x * 3
val foo = fn x => x * 3