加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 10:00:41 所属栏目:安全 来源:网络整理
导读:以下两个高阶函数产生相同的结果,但我无法理解两者之间的差异.事实上,我不明白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(
以下两个高阶函数产生相同的结果,但我无法理解两者之间的差异.事实上,我不明白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,f(a) + acc)
      loop (a,0)
}

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读