0%

柯里化

柯里化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import Foundation

/// 柯里化
/// 将一个接收多参数的函数变换为一系列只接收一个单个参数的函数

func add1(_ v1: Int, _ v2: Int) -> Int {
return v1 + v2
}

func add(_ v: Int) -> (Int) -> Int {
{ $0 + v }
}

let result1 = add1(10, 20)
let result2 = add(20)(10)
print(result1)
print(result2)

func add(_ v1: Int, _ v2: Int, _ v3: Int) -> Int {
return v1 + v2 + v3
}
// v2 v1 result
func add2(_ v3: Int) -> (Int) -> (Int) -> Int {
//func add(_ v3: Int) -> ((Int) -> ((Int) -> Int)) {
// 20
return { v2 in
// 10
return { v1 in
return v1 + v2 + v3
}
}
}

let result3 = add(10, 20, 30)
let result4 = add2(30)(20)(10)
print(result3)
print(result4)
/// 不断地函数嵌套, 最里层做计算

func currying<A, B, C>(_ fn: @escaping (A, B) -> C) -> (B) -> (A) -> C {
return { b in
return { a in
return fn(a, b)
}
}
}
let result5 = currying(add1)(20)(10)
print(result5)

–EOF–