入门Common Lisp的一些想法.
今年年初开始接触Common Lisp(以下都简称Lisp), 原因就是看了Paul Graham的《黑客与画家》(又被鼓动了, 哈哈). Paul在这本书中强烈推荐程序员学习Lisp, 宣称通过学习这门语言能给程序员带来不小的帮助. 具体的内容大家可以花点时间自行阅读一下, 书的内容还是很不错的. 书中写的不仅仅是关于计算机的知识, 还有一些关于财富的看法、教育的看法等等一系列有意思的观点, 挺不错的书. 出于自己的好奇心, 于是打算开始用空余的时间学习一下Lisp. 于是在amazon上花了不少钱买了一本Paul的《ANSI Common Lisp》来看. 买实体书倒不是因为自身条件有多宽裕, 主要的原因有两个: 1. 从自己学习的经验来看电子类的媒介比较适合快速获取信息或者是学一些比较浅层的知识. 若是打算较长久的学习一门知识的话, 用实体书来学习效果会更好一点. 2. 有一些电子书的发行并没有获得作者的授权, 所以下载电子书很可能会损害原作者的利益. 若作者已授权电子书的下载, 那么从网上copy一份作为学习资料也不会违背原作者的意愿. 比如在Paul的个人网站的这个链接里面 http://paulgraham.com/books.html , 《On Lisp》是公开免费下载的. 当然这些只是我自己的想法而已, 不一定对所有情况都适用.
说了一堆, 也应该轮到自己说一下Lisp的学习心得. 因为学习的时间还不是很长, 所以只能如瞎子摸象般较为分散的介绍一下这门语言的基本特点. 从自己的学习感觉来看这门语言的最大的特点有两个: 1. 函数式编程的代码风格( - -, 这不是废话么? 臭鸡蛋别来啊) 2. S表达式. 大家稍安勿躁, 稍安勿躁. 为什么只说这两个呢, 因为很多细节的特性都是围绕着这两个特性展开的, 比如基于函数式编程的风格提倡不对参数作任何修改、代码之间的调用都大多数用的是函数返回值而不是给变量赋值再传给函数等. 另外一个就是S表达式, 其实说白了就是把函数调用放在了最前面, 比如 (+ 1 2) 而不是 i = 1 + 2, Lisp省去了大量的local variable的声明、赋值操作. 而且所有的Lisp的S表达式的list(Lisp的核心数据结构)的第一个参数都是函数, 每一对 '( ) ' 就是一次独立的函数运算. 所以一个Lisp程序的结构就是一堆函数的层叠嵌套, 然后根据输入的数据执行相应的函数逻辑路径. 因此函数式的编程风格跟S表达式结合起来就是命令式语言中强烈推荐的代码整洁之道 - 精短的函数, 函数功能职权小而精. 所以这两个基本语言特性从语言的基因上提供了一个能写出优良代码的语言环境.
有些同学在初看Lisp的时候会被一堆的括号以及莫名其妙的一堆symbol(符号)搞到头晕, 但只要能慢慢的熬过这个坎, 就会发现Lisp就是一系列运算, 表达的是一种较为纯净的运算逻辑. 所以有些同学会感觉这门语言好像实用性不是很强, 大多数的同学会比较喜欢C/C++系列的语法, 实用、资料多、第三方库多. 这个可能跟目前的行业有关系, C/C++系列的语言比较适合大量、有次序、机械的数据比较、读写操作, 好比是工业化革命里面的大规模生成的工具. 而Lisp走的是另外一种路径, 它的设计初衷不像C/C++那样为了让机器运算数据, 而是只是为了单纯的计算.
浙公网安备 33010602011771号