对lisp关注久矣。
想不关注也难啊,阅读大神们的博客,Lisp,vi,emacs几乎都是高频词汇,360无死角地冲击你。
真正开始学习它是近期的事。算是慕名而来吧。尤其是在看了《黑客与画家》之后,更是迫不及待地在ubuntu里装上了clisp. 敲了第一行Lisp代码:

1
(+ 1 2)

Lisp的学习资料确实比较匮乏(国内而言),后来在图书馆看到《Clojure编程》(Lisp的方言之一),才算是找到了较为系统的入门教材。于是饶有兴致地翻了起来,虽然之前也看过大神们对Lisp的赞叹,比如《黑客与画家》的作者paul graham,可当亲自阅读Clojure写出的代码时还是会为这种清晰而强大表达能力惊叹。怎么可以如此优美地书写!
列表和函数是如此精巧而强大的东西。虽说在写python时也见识过列表的威力,却不知道它原来还能这样用!
虽说也写过不少函数,却丝毫不是函数式编程的风格。颇有‘我以前写的都是什么啊’的感受。
之前就曾读过“学习Lisp对你的其他语言有有莫大帮助”,如今信矣。
虽说至今也未在项目中使用Lisp,可函数式的风格已经帮助到我解决实际问题了–写出更利于维护的函数。 学习Lisp时日尚浅,不敢谈心得,恐见笑于大方之家,只分享下学习时的感受,也欢迎大牛们的指教。

下面列出我所了解的Lisp,以及我所喜欢的一些特性,参考的文章(博客)在文后列出

  • Lisp 是一门关于列表的语言。Lisp 中的一切内容(从数据到组成应用程序的代码)都是列表.每个列表都由一些原子和列表组成。数字就是原子。键入一个数字仅仅会返回该数字作为结果.
  • 操纵列表的有两类函数:构造函数选择函数。构造函数构建列表,选择函数分解列表。first 和 rest 是核心选择函数。first 选择函数返回列表的第一个原子,rest 选择函数返回除第一个原子外的整个列表

    1
    2
    
    > (first '(lions tigers bears))
    LIONS
  • 如果希望构建列表而不是将其分开,就需要构造函数。构造函数构建新元素:即列表

    1
    2
    
    > (cons 'lions '(tigers bears))
    (LIONS TIGERS BEARS)
  • 要获取列表的第二或第三个元素,应该获取 rest 中的 first,或 rest 中的 rest 中的 first

    1
    2
    3
    4
    5
    
    >(first (rest '(1 2 3)))
    2
    
    >(first (rest (rest '(1 2 3))))
    3

在如此简单的原语之上构建一门简洁优美的语言,其中的原理让一些程序员激动不已。这些由列表构建的简单指令构成了递归、高阶函数,甚至是闭包和 continuation 之类高级抽象的基础

  • 下面回顾一下到目前为止看到的内容: Lisp 使用列表和原子来表示数据和程序。
    对列表求值时将第一个元素看作列表函数,将其他元素看作函数参数。
    Lisp 条件语句将 true/false 表达式和代码一起使用。

waiting

参考资料: