1. 能使用函数式编程的语言有什么特点?FP 全称是什么?
- 函数和其他数据类型一样的地位,
①可以赋值给其他变量、②也可以作为函数参数、③函数返回值
- FP:
Functional Programming
函数式编程
2. 实现 ((num + 3) * 5 - 1) % 10 / 2
功能,用传统函数做法会怎么做?体验一下
3. FP - 柯里化 Currying (版本一)
- 首先,我们把上面的函数,封装成每次只传递一个参数的函数
- 虽然我们对函数进行柯里化,保证每个函数只有一个参数,但是
嵌套调用
,让代码的可读性依然很差 - 这时候就需要引入函数合成的概念
4. FP - 函数合成 (版本二)
- 目的:我们需要将两个函数合成一个函数
-
好像经过我们这样转换后,还是
函数嵌套调用
,完全看不到好处啊4. FP - 重载运算符,变变变(版本三)
这一步:也可以叫做将
合成函数
变成中缀运算符
-
这次代码就舒服多了,就像
流水一般
经过一个个函数处理 num4. FP - 重载运算符,优化(版本四)
我们这个合成函数缺陷比较明显,只能接受 Int 类型,思考如何改造呢?
-
我们先进行如下类型分析
-
最终版:
5. 什么是高阶函数(Higher-Order Function)?和 FP 有什么关系?
6. 什么是柯里化(Currying)?Array 和 Optional 的 map 方法接收的参数是一个柯里化函数吗?
7. 实践:如何将下面三个参数的函数进行柯里化?
// 思考如何把下面函数进行柯里化?
func add(_ v1: Int, _ v2: Int, _ v3: Int) -> Int {
v1 + v2 + v3
}
总结: 柯里化每次仅接收一个参数,当到达最后一个参数时,才会进行最终的计算。
8. 我们可以写一个通用函数,替两个参数的函数
进行自动柯里化
吗?
- 可以