ML功能currying

时间:2012-10-16 01:29:54

标签: functional-programming sml currying smlnj ml

有人可以向我解释currying的概念。我主要是学习它,因为我们正在我的“现代编程语言”课程中学习ML,以便进行功能性语言介绍。

特别是你可以使用这个例子:

    -fun g a = fn b => a+b;
      val g = fn: int -> int -> int
    -g 2 3;
      val it = 5 : int

我很困惑这些参数是如何传递的,或者如何在第一时间考虑这些参数。

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

在这种情况下,你明确表达了currying,所以应该更容易理解。

如果我们阅读了函数定义,它会说(释义):“创建一个函数g,当给出a时,返回fn b => a+b。”

也就是说,如果我们调用g 2,我们会返回函数fn b => 2+b。因此,当我们致电g 2 3时,我们实际上会拨打(g 2) 3;那就是我们首先得到上面描述的函数,然后在值3上使用此函数,产生5

Currying只是在几个“阶段”中创建一个函数的概念,每个阶段都接受一个输入并产生一个新函数。 SML为此提供了语法糖,使g等同于以下内容:

fun g a b = a + b;