gpt4 book ai didi

Swift:你如何理解这个函数签名:func curry(f: (A, B) -> C) -> A -> B -> C

转载 作者:可可西里 更新时间:2023-11-01 01:06:33 26 4
gpt4 key购买 nike

我在《Swift 函数式编程》一书中看到了这个函数,但是我不明白这个函数签名,这个函数的返回类型是什么意思?

func curry<A, B, C>(f: (A, B) -> C) -> A -> B -> C 
{
return { x in { y in f(x, y) } }
}

编辑:

这个函数是这样用的吗?

fun add(a: Int, b: Int) -> Int {
return a + b
}

let curriedAdd = curry(add)

//to add 1 and 2
let resultOf1Plus2 = curriedAdd(1)(2)

最佳答案

这是一个接受一个类型参数的函数 (A, B) -> C (即接受两个参数并返回一个参数的函数)并返回 A -> B -> C (即 A -> (B -> C) 即接受一个参数并返回函数 B -> C 的函数)。

柯里化(Currying)将两个参数的函数“分解”为两个步骤。柯里化(Currying)两个参数函数会产生返回另一个单参数函数的单参数函数。最后一个函数等效于第一个参数绑定(bind)的原始函数。

例如(在伪代码中,因为我不了解 Swift):

拥有:

f: (X,Y) -> Z
cf = curry(f)

然后 f(x,y)应该等同于 cf(x)(y)对于任何 x,y .

在您的示例中,resultOf1Plus2应该产生 3。但是,您可以在中间“拆分”进程,然后调用

let increment = curriedAdd(1)
increment(2) // 3
increment(5) // 6
let addFive = curriedAdd(5)
addFive(5) // 10

这对于普通 add 是不可能的功能。

参见 Wikipedia article on currying

关于Swift:你如何理解这个函数签名:func curry<A, B, C>(f: (A, B) -> C) -> A -> B -> C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26956494/

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