以下两个高阶函数产生相同的结果,但我无法理解两者之间的差异。事实上,我不明白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)
}
答案 0 :(得分:3)
第一个功能是curry。这意味着您可以更轻松地部分应用它。如果仅使用第一个参数列表,则该函数返回另一个带有签名(Int, Int) => Int
的函数。
如果您需要将具有特定函数签名的函数传递给更高阶函数(如map
或reduce
),这非常有用。
在其他函数式编程语言(如Haskell)中,所有函数都默认为curry。 我写了一篇关于这个主题的博文,以防你感兴趣。你可以阅读它right here.