gpt4 book ai didi

scala - 评估柯里化(Currying)函数

转载 作者:行者123 更新时间:2023-12-01 11:04:22 28 4
gpt4 key购买 nike

这个柯里化(Currying)函数接受一个有两个参数的函数并将其转换为一个有 1 个参数的函数:

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

def f(a : Int , b : Int) = a + b //> f: (a: Int, b: Int)Int

hotcurry(f) //> res0: Int => (Int => Int) = <function1>

如何返回函数res0: Int => (Int => Int) = <function1>被评估?

我试过了 fu(2) //> res0: Int => Int = <function1>

此功能的良好用例是什么?

最佳答案

只需一次传递一个参数:

val g: Int => (Int => Int) = (a: Int) => (b: Int) => a + b
g(3)(4)
// res4: Int = 7

g 接受一个 Int,并返回一个函数 Int => Int。然后该函数接受一个 Int 并返回一个 Int。因此,您将一个参数传递给第一个函数,然后将一个参数传递给返回的函数。

在您的情况下,只需执行以下操作:

val g = hotcurry(f)
g(3)(4)

如果你有一个双参数函数,你想稍后使用它作为一个参数函数,你可以使用它,提前打包一个参数。例如,map 有一个参数 Int => Int,所以你可以这样做:

val add = hotcurry(f)
val add3 = add(3)
Vector(1, 2, 3).map(add3)
// Vector(4, 5, 6)

关于scala - 评估柯里化(Currying)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28997060/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com