目录


1. 什么是函数式编程

Programming Paradigm

编程范式的发展有两个正交的方向,一个是从数据和函数的封装的角度(Non-OOP to OOP), 另一个是数据和函数的关系角度(命令式编程(函数围绕数据)和函数式编程(数据围绕函数))。

命令式编程和函数式编程的区别有如下几点:

3 Assignment

Assignment

  • Pascal triangle:递归比较简单,退出条件也很明显,分别是c==0c==r的时候;
  • Parenthesis Balance:用一个acc:Int来存储,每遇见一个{+1,}-1。退出条件是chars.isEmpty或者acc < 0
  • Counting Money稍微需要仔细思考,退出条件是Money == 0,和Money < 0 || coins.isEmpty

具体代码见这里

4 总结

本节我们首先对什么是函数式编程做了一个总结:

  1. 函数无副作用;
  2. 通过函数转换不可变数据而非改变原有数据来获取新数据;
  3. 数据围绕函数而非函数围绕数据,函数也是一等公民。

在这基础上,我们回顾了作为函数式编程理论基础的λ-Calculusλ-Calculus里最重要的3个概念是<expression><function><application><function>就是函数,<application>可以理解成函数调用。以函数为基础的λ-Calculus和以操作为基础的图灵机在计算能力上被证明是等价的,任何计算形式都可以被他们实现。现在的函数式编程命令式编程正是基于λ-Calculus图灵机发展过来。函数式编程的未来发展方向是和OOP结合,这也就是Scala背后的设计哲学。

对于函数,通过函数和变量的声明与定义的比较,可以看出他们同样拥有关键词名称类型字面值,因此有理由在一个更抽象的层面将函数和变量统一对待。函数中类型 + 数据(其实是函数体)就是匿名函数,也就是Block

5 参考资料


Share Post

Twitter Google+

Shunmian

The only programmers in a position to see all the differences in power between the various languages are those who understand the most powerful one.