// 柯里化
// http://www.jianshu.com/p/6eaacadafa1a Swift 2.0 柯里化方法 (废弃)
// http://www.swifthumb.com/thread-16079-1-1.html Swift 3.0 柯里化常用方法推荐
// http://www.ruanyifeng.com/blog/2012/04/functional_programming.html 函数式编程
/*
Curried function declaration syntax func foo(x: Int)(y: Int) is of limited usefulness and creates a lot of language and implementation complexity. We should remove it.
(函数的 currying 特性的使用场景并不大,但他会增加很多语言的复杂性,所以需要删除它)
*/
1 class Currying
2
3 {
4
5 // uncurried:普通函数
6
7 // 接收多个参数的函数(与类相关的函数,统称为方法,但是这里就直接说函数了,方便理解)
8
9 func add(a: Int, b: Int, c: Int) -> Int{
10
11 print("\(a) + \(b) + \(c)")
12
13 return a + b + c
14
15 }
16
17
18
19 // curried:柯里化函数 --> 本质函数式编程思想
20
21 func addCur(_ a: Int) -> (Int) -> (Int) -> Int{
22
23 return {
24
25 b in
26
27 return {
28
29 c in
30
31 a + b + c
32
33 }
34
35
36
37 }
38
39 }
40
41 }
42
43
44
45 let curry = Currying()
46
47 var number = Currying.addCur(curry)(12)(23)(12)
48
49 print(number)
50
51
52
53 // NO.2
54
55 let datePrint:(Int)->(Int)->(String)->Void =
56
57 {
58
59 month in
60
61 print("\(month)月")
62
63 return{
64
65 day in
66
67 print("\(day)日")
68
69 return{
70
71 action in
72
73 print("\(action)")
74
75 }
76
77 }
78
79 }
80
81 let actionPrint = datePrint(2016)(11)
82
83 actionPrint("写详细")
84
85