有人可以向我解释currying的概念。我主要是学习它,因为我们正在我的“现代编程语言”课程中学习ML,以便进行功能性语言介绍。
特别是你可以使用这个例子:
-fun g a = fn b => a+b;
val g = fn: int -> int -> int
-g 2 3;
val it = 5 : int
我很困惑这些参数是如何传递的,或者如何在第一时间考虑这些参数。
感谢您的帮助。
答案 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;