这两个高阶函数有何不同?

时间:2016-03-19 13:56:34

标签: scala

以下两个高阶函数产生相同的结果,但我无法理解两者之间的差异。事实上,我不明白1)。函数如何有两组()

1)

def sum(f: Int => Int) (a: Int, b: Int) = {
    def loop(a: Int, acc: Int) : Int =
        if (a > b) acc
        else loop (a + 1, f(a) + acc)
    loop (a, 0)
} 

2)

def sum(f: Int => Int,  a: Int, b: Int) = {
      def loop(a: Int, acc: Int) : Int =
        if (a > b) acc
        else loop (a + 1, f(a) + acc)
      loop (a, 0)
} 

1 个答案:

答案 0 :(得分:3)

第一个功能是curry。这意味着您可以更轻松地部分应用它。如果仅使用第一个参数列表,则该函数返回另一个带有签名(Int, Int) => Int的函数。

如果您需要将具有特定函数签名的函数传递给更高阶函数(如mapreduce),这非常有用。

在其他函数式编程语言(如Haskell)中,所有函数都默认为curry。 我写了一篇关于这个主题的博文,以防你感兴趣。你可以阅读它right here.