【问题标题】:What does "=>" mean in standard ml?“=>”在标准毫升中是什么意思?
【发布时间】:2019-10-23 06:48:42
【问题描述】:

似乎意味着一个函数输出这个......但我无法在任何地方找到它的解释。 我知道-> 用于类型,我要求对=> 进行解释。

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

^示例

【问题讨论】:

    标签: sml


    【解决方案1】:

    与关键字 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
    

    【讨论】:

      猜你喜欢
      • 2016-09-08
      • 2014-06-05
      • 2013-05-02
      • 2014-06-30
      • 2012-05-20
      • 2011-08-12
      • 2017-06-11
      • 2018-03-05
      • 2023-03-27
      相关资源
      最近更新 更多