Lisp到底有多好?实际上很难用好不好来判断它。
毕竟是存在了50多年的始祖语言了,很多地方看上去不是那么“现代”。但是一个无法避免的现象是,越来越多的语言,例如Python/Ruby/Java,都变得越来越像Lisp。将函数作为编程语言中的一等对象直接对其操作,也是现代编程语言的一个共识。这些特性在Lisp中都早已实现。Javascript更是一个披着C语言外衣的Lisp。实际上,连虚拟机都是Lisp最先有的。如果把很多现代编程语言看作是类的话,Lisp就像是基类。
那么,为什么Lisp没有流行起来?其实Lisp曾经流行过,甚至有过专门以Lisp内建函数为CPU指令的Lisp Machine。那么为什么Lisp又“没落”了?因为人类的习惯是很难改变的。从最开始的Fortran,到后来的C,其代码组织方式都是符合人类习惯的,命令式的。而Lisp的创始人是一位数学家,而Lisp的代码组织形式符合的是逻辑,是数学。因而有一种“处庙堂之高”的感觉。
不过,我十分确定的是,即使不在工作中使用Lisp,它也会帮助你写出更好的程序,也会帮你更好地理解编程语言本身。著名的开源文档《如何成为一名黑客》里,作者将Lisp列为黑客应该学习的五种编程语言之一,并且也认为学习Lisp会给程序员带来莫大好处的观点。
除此之外,很多著名黑客和计算机大师都给于Lisp极高的评价。前一段时间出版的《黑客与画家》的作者,也是本书的作者Pual Graham便是其中的一位。在《黑客与画家》中,PG深入讨论了各种编程语言,并充分给出了“为什么Lisp是目前为止最强大的编程语言”的证据,值得一读。
这本书适合初学者。前半本书对Lisp很多基本的东西,从最初的代码组织形式(前缀表达式形式),到基本的数据结构(列表、元组、字典等),再到函数,都讲得十分详细,甚至有时候你会觉得太详细了(但是并不冗余)。
除了讲解Lisp的基本语法,书中还有一些关于Lisp特有的语言元素的讲解(不过可以看到的是,这些语言元素已经被很多现代语言所借鉴了),例如map、reduce的实用。通过这一部分的讲解,你可以对Lisp的强大之处有一个初步的了解,这一部分也算是Functional Programming的入门(FP的一个重要特性便是List Comprehension)。
通过前半本书的学习,初学者可以对Lisp有一个直观的认识,写一些基本的程序也没有问题了,例如快速排序。
后半本书比较偏向于介绍。介绍了Lisp的面向对象系统CLOS,包管理机制、强大的Macro,以及三个例子。当然,对于理解Lisp的高级特性,这些是不够的。不过再此之上可以阅读更多的书籍,例如同样是PG写的《On Lisp》,这本书对Macro做了详细介绍。
总的来说,这本书的讲解十分详细(我是看英文版的,依旧十分流畅)。但是由于作者只着眼于Lisp语言本身,并没有涉及太多实际开发相关的内容。所以推荐阅读完本书后阅读《Practical Common Lisp》作为补充。