名词解释
在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。柯里化举例说明
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))
反柯里化举例
实现反柯里化与柯里化正好相反。注意,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)
参考资料
- Scala函数式编程
Scala柯里化和反柯里化
最新推荐文章于 2023-01-24 09:57:01 发布