在标准ml中“ =>”是什么意思?

时间:2019-10-21 17:51:40

标签: sml

似乎意味着一个函数输出了这个...但是我找不到在任何地方解释它。 我知道->是针对类型的,我要说明=>

val twice = fn f => fn x => f(f x);

^示例

1 个答案:

答案 0 :(得分:2)

它们与关键字fn一起构成lambda表达式,即匿名函数。在您的示例中,twice被分配了这样的lambda表达式。具有更明显的寄生:

val twice = (fn f => (fn x => f(f x)))
因此,

twice是一个接受一个函数并返回另一个函数(另一个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上调用结果时,x4替换,导致plus2(plus2 4)的结果为8。


使用fun的函数定义可以看作是为名称分配lambda表达式的语法糖,即以下两行是等效的:

fun foo x = x * 3
val foo = fn x => x * 3