Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 这两个高阶函数有何不同?_Scala - Fatal编程技术网

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

Scala 这两个高阶函数有何不同?,scala,Scala,以下两个高阶函数产生相同的结果,但我很难理解两者之间的区别。事实上,我不明白。一个函数如何具有两组() (一) (二) 第一个函数是curry。这意味着您可以更轻松地部分应用它。如果只使用第一个参数列表,该函数将返回另一个签名为(Int,Int)=>Int的函数 如果您需要将具有特定函数签名的函数传递给更高阶的函数,如map或reduce,这将非常有用 在其他函数式编程语言(如Haskell)中,默认情况下所有函数都是curry。 如果你感兴趣的话,我就这个话题写了一整篇博文。您可以阅读它Sca

以下两个高阶函数产生相同的结果,但我很难理解两者之间的区别。事实上,我不明白。一个函数如何具有两组
()

(一)

(二)


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

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

在其他函数式编程语言(如Haskell)中,默认情况下所有函数都是curry。
如果你感兴趣的话,我就这个话题写了一整篇博文。您可以阅读它

Scala函数可以有多个参数列表(如您第一次定义的
sum
)。你能发布你的博客链接吗?只有2)是高阶函数。1)不是吗?1) 是否改为Curry?不,高阶函数是将函数作为参数的函数,如
map
filter
reduce
。因此,2)是一个正常函数,1)是相同的函数,但为curry.:)更正,1)和2)都是高阶函数,但只有1)是curry:)
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)
} 
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)
}