Scala柯里化和反柯里化

  1. 名词解释
    在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。

  2. 柯里化举例说明

    def curry1[A, B, C](a: A, f: (A, B) => C): B => C =
      (b: B) => f(a, b)

    这个函数的结果是一个高阶函数接收一个带有两个参数的函数,进行部分应用。即我们有一个A和一个需要A和B产生C的函数,可以得到一个只需要B就可以产生C的函数(因为我们已经有A了)。就像我拿一个胡萝卜换你一个苹果和香蕉,你已经给了我一个苹果,只用再给我一个香蕉就可以换胡萝卜了。

    再看一个柯里化的例子,把带有两个参数的函数f转换为只有一个参数的部分应用函数f。

    def curry[A, B, C](f: (A, B) => C): A => (B => C) =
      (a: A) => ((b: B) => f(a, b))
  3. 反柯里化举例

    实现反柯里化与柯里化正好相反。注意,Scala中的右箭头=>是右结合的, A=>(B=>C)可以写为A => B => C

    def uncurry[A, B, C](f: A=>B=>C): (A, B) => C =
        (a: A, b:B) => f(a)(b)
  4. 参考资料

    • Scala函数式编程
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值