Swift Day 20 函数式编程(重要)

1. 能使用函数式编程的语言有什么特点?FP 全称是什么?
  • 函数和其他数据类型一样的地位,①可以赋值给其他变量、②也可以作为函数参数、③函数返回值
  • FP:Functional Programming 函数式编程
    图中两个地址是比较好的学习资料
2. 实现 ((num + 3) * 5 - 1) % 10 / 2 功能,用传统函数做法会怎么做?体验一下
传统实现
3. FP - 柯里化 Currying (版本一)
  • 首先,我们把上面的函数,封装成每次只传递一个参数的函数
柯里化
  • 虽然我们对函数进行柯里化,保证每个函数只有一个参数,但是嵌套调用,让代码的可读性依然很差
  • 这时候就需要引入函数合成的概念
4. FP - 函数合成 (版本二)
  • 目的:我们需要将两个函数合成一个函数
合成函数
  • 好像经过我们这样转换后,还是函数嵌套调用,完全看不到好处啊

    4. FP - 重载运算符,变变变(版本三)
  • 这一步:也可以叫做将合成函数变成中缀运算符

image.png
  • 这次代码就舒服多了,就像流水一般经过一个个函数处理 num

    4. FP - 重载运算符,优化(版本四)
  • 我们这个合成函数缺陷比较明显,只能接受 Int 类型,思考如何改造呢?

  • 我们先进行如下类型分析


    类型
  • 最终版:


    获得函数合成的最终版
5. 什么是高阶函数(Higher-Order Function)?和 FP 有什么关系?
image.png
6. 什么是柯里化(Currying)?Array 和 Optional 的 map 方法接收的参数是一个柯里化函数吗?
image.png
7. 实践:如何将下面三个参数的函数进行柯里化?
// 思考如何把下面函数进行柯里化?
func add(_ v1: Int, _ v2: Int, _ v3: Int) -> Int {
    v1 + v2 + v3
}
image.png
  • 总结: 柯里化每次仅接收一个参数,当到达最后一个参数时,才会进行最终的计算。
8. 我们可以写一个通用函数,替两个参数的函数进行自动柯里化吗?
  • 可以
image.png
9. 自动柯里化合并函数 的结合使用
image.png
10. 对三个参数的函数,进行自动柯里化
image.png
11. 什么是函子(Functor)?为什么 Array 和 Optional 是函子?(了解)
image.png
image.png
image.png
12. 什么是适用函子(Applicative Functor)?(了解)
image.png
13. 什么是单子(Monad)?(了解)
image.png

你可能感兴趣的:(Swift Day 20 函数式编程(重要))