# 重温范式
# 函数范式
—— 精巧的数学思维
纯函数式编程 Haskell
非纯函数式编程 Lisp
- 理论
- 特点
函数是程序的核心,函数无副作用或尽量减少副作用
没有显式的内存管理
代码结构简洁精巧
高级函数类似于基本数据类型,故可将代码用作数据,回调机制采用的正是函数式风格
- lambda 演算(lambda calculus)
lambda 演算被证明是图灵完备的
命令式编程需要指定计算的过程,着重围观的细节;声明式编程只需指定计算的原则,着重宏观的方向。
- 没有广泛应用的原因
主观上,程序员更习惯于机器风格的过程式思维和现实风格的OOP思维
客观上,函数式语言过于数学化和抽象化,在表现力和运行效率等方面与过程式和OOP语言有一定差距
- 应用领域
数学计算、人工智能等
# 逻辑范式
—— 当算法失去了控制
- Prolog语言
代码由一系列事实(fact)、规则(rule)和查询(query)组成
举例:
如何表达断言 :如果一个人未婚且为男士,那么他就是一个光棍。
/* X is bachelor if X is unmarraied and male*/
bachelor(X) :- unmarraied(X), male(X) .
:- 表示if , 表示 and
- 特点
1. 模拟人类的逻辑思维
应用 —— 机器证明、专家系统、自然语言处理、博弈等人工智能领域,非学术领域的知识管理、智能决策分析等
2. 没有明显的输入和输出之分
3. 着眼于关系而非函数
4. 逻辑式编程中程序员只需表达逻辑,而控制交给编译器或解释器去处理
- 实例
表达血缘关系
通过规则来定义关系,易于扩展(过程式语言可能需要负载的if嵌套来实现)
既可以通过人来查找关系,也可以通过关系来查找人
- 优势
更简洁、更抽象、更少副作用
运用得当能大大提升生产效率
还能运用于快速原型(rapid prototyping)开发
- 劣势
运行效率低
可掌控性差
与常规的过程式思维差异较大,更适合基于规则(rule-based)的应用,而不是基于状态(state-based)的应用
目前还不够成熟和完善
# 汇总范式
—— 一张五味俱全的大烙饼
- 编程范式
掌握范式对提升编程语感至少有两层作用:
编程语言的语法、语义等都是从编程范式的树根衍生而出的枝叶,把握这种脉络的节奏,代码才会如音乐舞蹈般韵律有致;
每种范式擅长的领域不同,只有博闻广识,才能扬长避短
通常有一整套的理论和思想体系、具有全局性、系统性和渗透性
更普适更抽象
对语言由专门的要求,事实上,语言本来就是围绕其所倡导的核心范式来设计的
依靠语言和工具的支持,编程范式才得以建立起一套独特而完善的抽象机制和方法体系,
从而为倡导的世界观和方法论奠定基石
核心价值
一种编程范式之所以能独树一帜,关键在于它突破了原有范式的一些限制,带来革命性的新思维和新方法,进一步解放了程序员的生产力
- 总结
- 语言为形 范式为神,应以神导形 以形传神
- 范式总结与分析
- 不怕有缺点,就怕没特点
# 情景范式
—— 餐馆里的编程范式