Week 4
一级函数 First-Class Functions
- 函数式编程的意义:
- 在绝大多数情况下避免异变的发生
- 将函数视为一种值来使用
- 鼓励递归的代码风格以及递归的数据结构
- 接近数学定义的代码风格
- 使用“懒汉方式”编程
- 函数式语言,没有确切定义,可以认为是一切简化函数式编程的语言
- 一级函数:可以被当作值使用的函数
- 函数也可以作为值,并视其为值用于各种场景
- 大多数的使用情况是作为另外一个函数的参数或者结果
- 上述情况下,使用一级函数的函数称为高阶函数,是一种分解常规函数的有效方法
- 函数闭包:能够使用函数定义外部绑定的函数
函数作为参数 Functions as Arguments
- 将函数作为另一个函数的参数,并在后面这个函数的函数体中被调用
- 可以是一种比较优雅的策略,将多个类似的实现的公共部分提取出来,只需要指定参数,就可以一次调用可以获取不同的实现
多型类型 Polymorphic Types
- 高阶函数通常十分泛化和重用性以至于其具有多型类型
- 但是有一些高阶函数是不多型的
- 同时,存在一些一阶函数是多型的
- 当完成一个函数的声明时,应当仔细思考其类型(参数类型)
匿名函数 Anonymous Functions
- 一种不使用
fun
进行绑定的函数定义 - 简化思路:我们只需要一个函数的逻辑,并不需要对他进行额外绑定,只要确保我们用它的时候出现即可
- 函数表达式,定义了一个函数,但是不是绑定,只是一个表达式,其评估值为函数
fn arg => body
- 这个表达式中的函数内容没有名字(因为没有发生绑定)
- 这样,我们就可以在只需要作为参数的函数的使用上采用这种表达式方式(高阶函数的参数)
- 但是对于一个递归函数,则不能使用匿名函数
- 如果没有递归的问题,那么函数绑定实际上使变量绑定和fn表达式的语法糖,即
fun name arg = body
可以写作val var = fn arg => body