向伟大的Lisp致敬

没有一个国家用来交流的语言是Lisp,因为它是编程语言。世界上有伟大的人,伟大的国家,伟大的发明,同样,还有伟大的编程语言。

世界上的编程语言实在是多如牛毛,从令人耳熟能详的C、C++、Java、C#、Visual Basic、Fortran、Pascal,
到那些令人耳目一新的如Perl、Python、PHP、Objective-C、Ruby、F#、Smalltalk、Haskell等等,实在是十个手指数不过来。且不说是否有必要学会这么多种语言,但是那些认为自己已经精通了世界上所有的编程语言的人现在请自行面壁。

一个语言何来伟大一说呢?或许你认为没有,但是我就是觉得有,不因为这个语言救苦救难,只因为这个语言实在是美丽得让人窒息。它是那么的与众不同,又是那么的令人震撼。

要知道Lisp到底有多么的与众不同,只要比较一下就知道了。不如就拿随便一个学过编程的人都知道的那些所谓的”主流”语言如C、C++、Java、C#、VB、Perl、Python什么的来比较吧。

先来个纠结一点的话题,Lisp的历史比起上面所说的所有的语言都要老——Fortran除外。Lisp诞生于1960年,它的创始人是数学家约翰麦卡锡。
麦卡锡在那一年发表了一篇论文,文中证明了只要有给个简单的操作符和一个函数的表示方法,那么就可以构造出一门完整的编程语言.
实际上,他证明的是存在与图灵机等价的东西的存在,而且从程序设计的角度来讲,这个东西比图灵机更强大,更是从软件的角度而不是从机器的角度来看待程序设计。

其次,Lisp是一个有”方言”这种概念的语言,在Lisp诞生后不久,就分化出了许多的变体,有Lisp Machine Lisp、MacLisp、Xero Lisp、InterLisp、Scheme、Common Lisp等等,同样多如牛毛。
这些东西都是由各种科研机构研发的,当中包括世界名校麻省理工学院、卡耐基梅隆大学和施乐公司——施乐公司创造了世界上的第一个图形用户界面和鼠标——没错,微软那时候还没有肉吃呢,更别提创造这些了。

第三,Lisp在那个年代引入了许多人们没有想过的概念。
- Lisp第一个引入了条件式,因此现在C语言里面才有if语句可以用——因为Lisp的创始人同样是Algol的标准指定委员会的一员,而Algol又深深地影响着C的发展;
- Lisp里面的函数是一个数据类型,就像普通的什么整数浮点数一样的存在,它是第一级的数据类型。所以在Lisp当中,函数可以作为参数,可以存储在变量当中,可以传给另一个函数,甚至可以当返回值返回;
- Lisp第一个把数学中的递归的概念带入了程序设计的领域;
- Lisp中的变量事实上都是指针,变量没有类型,变量中的值才有类型;
- Lisp第一个引入了垃圾收集机制,而现在这个功能同样出现在所有的现代语言中,例如Java、Perl和Ruby等等;
- Lisp当中关于读取、编译和运行的时间界限非常的不明显,正因为如此才使得Lisp可以在读取时编译和运行、又可以在编译时读取和运行代码,正是这种功能使得Lisp可以成为其它软件,例如神的编辑器Emacs的扩展语言。

除了引入了特点,Lisp还有不少古怪又强大的地方。例如在用Lisp写的程序中会有大量的括号出现,并且看起来几乎没有语法——唯一的语法就是括号要成对出现。
Lisp还有世界上最强大的宏。这可不是C语言当中容易出毛病的宏,Lisp的宏非常的灵活,强大到可以重新构成一门语言,可以编写新的语言功能而不仅仅是新的函数。
例如,在Lisp中没有直接替换C语言中的switch语句的东西,但是利用宏就可以自己写一个。

与上面的那些主流语言相比,Lisp当然还有其它特点。例如,Lisp中的变量的定义不需要声明类型,因为根本就没有类型,只管用就是了。
计算你之前对一个变量赋了一个数字类型的值,你也可以在下一刻马上换成一个字符串类型的值,Lisp内部自动处理这中间的一切细节。
新出现的编程越来越多的从C语言的倾向向Lisp的倾向靠拢。Perl、Python、Ruby等等,都是从Lisp身上借鉴了大量的特点的语言。如果从这点看,可以说,现在的编程语言的水平,也就达到了上世纪60年代的水平而已。

Lisp还是在人工智能领域举足轻重的语言,甚至一提到Lisp,人们就会想到人工智能领域的程序设计。不相信,那么请你去查查看Gensym公司的顶级产品,价值上万的软件产品G2,那可是用来进行决策的一个系统。
当然,Lisp也不是一定要跟人工智能扯上关系,例如它也可以用来编写Emacs、用来编写美国能源部使用的数学软件Macsyma、另一个著名的开源软件Maxima、还有雅虎的网站。
在Lisp中,编写程序可以非常的简单,因为它提供了非常多有用的功能。

例如我自己做的计算给定年月日是星期几的程序用Lisp只有19行,而用C语言有27行。ITA的总裁的话是,一行的Lisp代码相当于20行的C代码,哈哈,这里的悬殊还算可以。
在Lisp中,如果要定义一个计算两个向量的内积的函数,只需要这么写:

(defun vmv (v1 v2)
  (apply #'+ (mapcar #'* v1 v2)))

看,多么简单,其它语言未必有这么的简洁明了。要使这个函数正常工作,你只需要保证你输入的向量的内容正确就可以了。是不是觉得Lisp很美啊?
虽然Lisp确实是非常的惊人的语言,但是要真正品尝它的奇妙的地方,还是需要自己去亲身体会.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值