2012-10-16 50 views
3

有人可以请解释给我卷曲的概念。我主要是在学习它,因为我们在我的'现代编程语言'类中学习了ML以用于函数式语言介绍。ML功能柯里尔

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

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

我很困惑如何将这些参数传递或如何别想它摆在首位。

谢谢你的帮助。

回答

4

在这种情况下,您将显式地进行柯里化,因此应该更易于理解。

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

也就是说,如果我们拨打g 2,我们取回功能fn b => 2+b。因此,当我们拨打g 2 3时,我们实际上拨打(g 2) 3;那就是我们首先得到上面说明的函数,然后在值3上使用这个函数,产生5

柯里格只是在几个“阶段”中制作一个功能的概念,每个阶段都需要一个输入并产生一个新功能。 SML具有用于此语法糖,使得g等效于以下语句:

fun g a b = a + b; 
+0

完全拼写出的版本是这样的:'VAL克= FN一个=> FN B => A + B'。我觉得这很有用,因为它表明函数是值,对'fun'关键字没有特殊的魔力。 – waldrumpus

+0

@waldrumpus:实际上,'fun'是'val rec'的语法糖,而不是'val',虽然在这种情况下并不重要。 :) –

+0

'环境'(我正在使用SML/NJ)如何知道fn是什么?b => a + b在这种情况下知道什么是?那不是一个没有约束的变数。也许混淆是我阅读的方式;我应该从左到右还是从右到左阅读? – Nick