函数式编程

  由于读的是北大的ppt,所以这篇基本属于读书笔记,不太容易整理成通顺的文章。

  首先理解函数式编程,在普通语言或者说用的比较多的命令式语言(如C/C++的C子集),函数其实到处可见,抛去函数式编程,其他编程语言都有“函数这个概念”。函数经常被用到,以至于不被重视。函数式计算的集合,是编程语言提供给我们的一个抽象概念,让我们在这个概念之上进行思考,也就是封装。任何一门高级语言都必定会提供一定的抽象能力给programmer去用,从而提高编程效率。面向对象也是,个人觉得面向对象提供了更高层次的抽象,更高级别的封装。更利于人们理解程序。当然这也不是一定的,主要还是看程序员的能力。(思考:因此是不是说抽象能力可以从某种层次上反映一个程序员的编程能力呢,程序员编程应该站在抽象的层次而不是底层的技术细节上)。回归正题,那函数式编程必定也会提供函数抽象了。那函数式编程与其他编程语言的区别在哪里呢,函数式编程中有一句话经常被提到“函数是一等公民”。什么是一等公民,就是享有各种权利。在编程语言中权利是哪些方面呢,因为也刚开始学习函数式编程,所以可能总结的不对,例如可以被当做变量赋值,当做参数以及返回值。这里要和C的函数指针区分开(C的函数在代码区,只有读的权限,如果去修改函数指针会发生segment fault,因此只提供了部分函数式编程的特性,肯定有有不支持的方法),函数式编程中函数式作为一个“对象”来对待的,既然是“对象”那就应该可以像变量一样进行操作。函数式编程不仅仅提供函数级别的抽象这种简单的功能(像其它编程语言),更重要的是提供计算过程的抽象。因此理解了这点再去学习函数式编程便会容易的多,举例函数式编程中为什么可以以函数作为参数是因为在计算中只有小部分计算有所不同,其它都一样。这样我们就需要将这“不同的小部分”作为函数传入其中。函数式编程可以将函数作为返回值,是因为可以在函数中通过对传入的函数重新包装生成新的函数(有点继承的意思)。

 

ambda为例。lambda即是匿名函数。在函数中,scheme支持块作用域,允许函数在函数中定义,这样是为了方便组织代码。同时很多函数由于是一次性的,没有必要命名,一次就以lambda的形式表示出来了。

 

posted @ 2016-01-31 23:42  johnny_HITWH  阅读(214)  评论(0编辑  收藏  举报