初识函数式编程

最近刚开始了解函数式编程。先是在Ubuntu虚拟机上装了clisp,到图书馆找关于Lisp的书结果少得可怜,在老校区预约了一本,拿过来一看是82年的,就几十页。

1)什么是函数式编程
“约翰麦卡锡于1960年发表了一篇非凡的论文,他在这篇论文中对编程的贡献有如 欧几里德对几何的贡献.1 他向我们展示了,在只给定几个简单的操作符和一个 表示函数的记号的基础上, 如何构造出一个完整的编程语言. 麦卡锡称这种语 言为Lisp, 意为List Processing, 因为他的主要思想之一是用一种简单的数据 结构表(list)来代表代码和数据.”

我们知道C里面的函数是有参数和返回值的,但参数和返回值的类型受到限制:不能返回结构或者函数类型(函数指针),参数不能是函数。但可以有函数指针变量。例如我们可以定义:

double (*fptr)(double);

fptr=sin;//由于sin也是接受double型并返回double的函数指针,所以可以将它赋给fptr

习惯了用C编程,我很想知道一个可以接受函数参数甚至允许函数返回函数的语言是怎么构造起来的。我理解的另一个方面是,C或者JAVA都是命令式的,几乎每条语句都是一个命令:赋值,判断大小,循环。而函数式编程是让函数自己在运算,相当智能。有点像C里的递归函数:你不需要把函数执行的每一步都了解清楚,只要让它合适地递归,并确保能够终止,那么一定就能得到想要的结果。

2)几种不同的函数式编程语言

Lisp显然是最早的函数式编程语言,然而我在找Lisp的时候其实是Common Lisp。ubuntu下直接apt-get install clisp装的。于是我直接忽略了其他的lisp变种。

Wiki百科上有个编程语言分类表,还有一种FP语言是Haskell,它是一种“纯函数式”编程语言,具体怎么个“纯”,以后慢慢学。有一个Haskell入门的网站挺不错的。

还有就是Erlang了。记得在《程序员》上看过它的介绍,今天在图书馆看到《Programming Erlang》的中文版,翻译的不错,看了第一章。它跟其它语言又有不同:它适合多核编程,自称是“面向并发编程”语言。可以想见在多核时代Erlang会很有前途。但这也是有代价的,如它的变量只能一次赋值等。书上还介绍说它在计算整数的时候是准确的,可以算出大整数,像234124124*547892*84952这样的值都可以算出准确的数值。觉得挺诧异。回去在clisp上敲了一下,发现也可以,Haskell上也行,clisp甚至直接算出了1000!。奇怪这些FP语言为什么都支持大整数运算。

有一点不同是clisp里面表达式必须要带(),而且采用的是前缀表达式,比如3+4就应该写成“+ 3 4”才会得到结果。也就相当于把加号也看做了函数,两边的数值是它的参数。但是后面的两个貌似都还是采用常见的中缀表达式。

3)继续努力

纯属兴趣,或许过了这一段兴趣就没了?好吧,我只是对那些算子什么的比较好奇。。。

Advertisements
下一篇文章
留下评论

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: