posts - 6,  comments - 2,  trackbacks - 0
Lisp名字来源于LISt Processor,也就是列表处理的意思。初学者第一眼见到Lisp往往印象最深的也就是里面成堆的括号。的确没错,括号就是该语言最显著的特点。整个语言的源代码也是以括号作为构造其语法树的依据。
很多初学者有考古的爱好,听闻了传说中的7公理,所谓7个操作符可以构造一切,并且为止着迷。且不说这7公理是不是真的能构造出目前很多应用上所需要的一切,就算真的能,性能也必定很低,因为具备的材料太少,很多基础的东西也要从头开始构造。而精简的构造似乎并没有为实际应用带来多少好处,图灵机的构造比这几个公理更简单,但是你不会看到有多少人用图灵机编程。制造计算机系统就是一个寻找扩展性、成本、体积、功耗等等参考的平衡点的过程,不在那个平衡点则很容易被淘汰。

最初版的Lisp早已没人使用,取而代之的是无数人基于Lisp的特点构造出的一系列类似Lisp的语言,无论他们名字里有没有Lisp,他们已经不是Lisp了,但是他们又是带有Lisp特点的语言,所以又被叫做Lisp的方言。所以看到某本书里介绍的某个Lisp的源代码,里面无数的括号的组织和括号之间关键字,千万不要觉得很神秘,因为那已经完全是个人或者某个组织定义的,不是非得那么设计的,如果你愿意,你也可以实现一个自己的Lisp方言。

Lisp以括号的简洁形态激励了无数人和无数组织制定和实现自己的Lisp方言、一旦有后来者不满意又会对之前存在的Lisp标准和实现进行“总结”而开发新的Lisp,加上开发新的Lisp的确简单(因为其语法简单,非常繁琐的语法分析部分很容易写),则更是激励无数初学者实现自己的Lisp,甚至有教科书的作业就是实现Lisp,所以到目前,已经根本无法统计到底存在多少种Lisp或者说Lisp的方言了。但是总的来说,目前还是有一些名气比较大的Lisp分类,用户比较多、实现比较多、资料也比较多,学习的时候可以优先选择下面三种:

Scheme:非常小型的Lisp方言,内容少至早期标准也仅仅有几十页,非常适合初学者学习。由于早期似乎被用作教学语言,所以并没有针对项目开发设计一些必要的措施,包括模块、名字空间等等。最新的标准正在尝试弥补这个缺陷但是进展似乎比较缓慢。目前来说比较好的实现有:
1. DrRacket,开源实现,自带IDE,有高亮、调试功能,支持Scheme相关的几种方言,自带手册比较完备,适合初学者。
2. Chez Scheme,传说中的异常高效的Scheme实现,支持最新标准,且作者是Scheme实现的权威,品质有保证。但是该软件为专有软件,需要购买使用。作者在其首页提供免费精简版Petite Chez Scheme。
3. Guile,GNU的扩展语言,一些GNU的软件就是用这个实现进行扩展的。
等等……
当然,因为Scheme语言的确比较精简,自己实现一个Scheme也是不错的选择。难度并没有想象中的大,实现后还可以嵌入在自己的项目中于扩展用。
Scheme学习资料非常多,包括
《The Scheme Programming Language》这本书是之前介绍的Chez Scheme的作者R. Kent Dybvig写的,内容详尽、语言的每个特性都给出示例。
《Structure and Interpretation of Computer Programs》这本书又叫做“计算机程序的构造和解释”,虽然通常被认为是一本入门书,但是实际上内容涵盖很广,包括计算机原理、编译器构造、符号计算、电子电路等等,编程语言成了描述这些内容的无关紧要的工具,做完大部分习题很有挑战性。
《Revised5 Report on the Algorithmic Language Scheme》又被叫做“R5RS”,初看这个题目有点莫名其妙,实际上这是一份类似Scheme标准的东西,里面最直接的描述了Scheme的关键特性,甚至有点面向语言实现者的意味。该标准之后还在不断地出第六份第七份等等,增加了一些标准库的内容。读通这本可以几乎完全掌握Scheme了。
因为Scheme的资料太多,暂时就列出上面三份,能看完这些掌握得就差不多了。

Common Lisp:又被叫做CL,是一个典型的“总结性”Lisp方言,也就是一次把各个Lisp方言的特性进行总结的尝试,并且获得了一定的成功。该语言极其复杂以至于很少有实现能比较完整实现其标准(虽然不少CL的实现都自称自己完整实现了标准)。比较常见的实现有:
1. SBCL,开源实现,来自与CMUCL,编译到原生码执行性能有保障。
2. CLISP,一些教科书推荐的Common Lisp实现,性能比较差。
等等……
PS:据Common Lisp界著名人物小妮补充的部分CL实现现状:
Allegro Cl, Lispworks, CCL, SBCL, ECL, CMUCL(已死),CLISP(垂死),ABCL,MKCL(半主流,这个是从ECL改过来的),mocl(小众),Corman Lisp(已死)
常见的教材有:
《ANSI Common Lisp》传统风格的编程语言教科书,内容详尽。
《Practical Common Lisp》据说得了Jolt大奖,里面以一系列所谓现实生活中的例子来推进教学,喜欢这种类型教材的可以看看。

Emacs Lisp
这算是一种专用Lisp,也就是说它并不是通用编程语言,而仅仅是用于扩展一个叫Emacs的文本编辑器。这个文本编辑器历史悠久,按键绑定灵活,用这种编程语言进行扩展后实现一些比较简单的功能可以简化文本编辑工作(当然本身还有其它问题,是否值得专门学习有很大争议)。学习Emacs Lisp是在对Emacs这个文本编辑器产生兴趣并且初步掌握后,想进一步探索和扩展的很自然的选择。
比较常见的实现有……当然是GNU Emacs,本身就是内嵌在Emacs编辑器中的。而最好的教材,毫无疑问就是自带的手册。推荐学习过程为
第一步:初步掌握Emacs编辑器的操作
第二步:学会一些基本的语法
第三部:尝试写一些扩展,需要的功能就去查找手册,找到该功能的接口后用之前学到的基本语法组合起来。

正如之前介绍的Lisp的特性,仅仅以括号作为明显的特征,激励无数人不断总结和发明自己的方言,这些方言没法介绍完,具体哪些值得学习观察。有一些现代的Lisp方言和实现挺有价值,比如Clojure,可以运行在JVM上,丰富的语法,还能运行在JVM上,重复利用之前用别的运行在JVM上的语言写的程序,这就是一个不错的选择。

参考资料:
LISP:http://zh.wikipedia.org/zh-cn/LISP
图灵机:http://zh.wikipedia.org/zh-cn/%E5%9B%BE%E7%81%B5%E6%9C%BA
posted on 2014-07-07 22:51 呜呜 阅读(1613) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理