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)
|