想学CL却不知如何入手。

 楼主还是个编程小白,用Java写过一点JDBC的代码,现想要学CL,正纠结读哪些书开始,我正在读《实用Common Lisp编程》,目前读到第三章,虽然书中代码例子都能抄下来并运行成功,但感觉一头雾水,读了前三章感觉啥都没学会。

 最近又看到两本书,分别是《ANSI Common Lisp》和《On Lisp》很纠结要不要暂时不读《实用Common Lisp编程》,从而开始读《ANSI Common Lisp》。

 希望大家不要劝退我不要学CL,因为我连Emacs配置CL的开发环境都是Emacs中文群组里的大佬们手把手教的…不好放弃。

所以为啥你们都以为书只能一本一本照顺序看,就没人跳着看或者几本书同时对照着看的么。

1赞

您应该先看 SICP 或者 A little scheme 这种编程启蒙读物。

Practical Common Lisp 是给已经想好要写什么程序,换成别的编程语言能写出来,想了解如果用 CL 该怎么写的人看的书。

ANSI Common Lisp 是用来先过一遍对 CL 有个整体的大概了解然后遇到具体某个功能时当作字典查的书。

4赞

Little Schemer吧,讲得很详细。(既然用Emacs 不如从Emacs Lisp开始学?用Emacs也很方便,不像CL/Scheme还要配置环境)

Common Lisp the Language, 2nd Edition我看的这个,可能要梯子

无脑推荐 SICP

能不能分享下具体从sicp中学到了什么?
赞这样的分享, 哪怕一句sicp中count-changes的case不错,
胜于sicp是启蒙读物, 以…为抓手, 加强了…的建设, 夺取编程入门的伟大胜利.

就是入门级別的算法分析,编译和计算机原理,典型到几乎天天都在用的数据结构,主流的 object/functional/logic paradigm 简介。看完至少在编程上有足夠判斷力不至于到处问这种怎么学,学了有什么用,看什么好的沒營養问题。


我沒从 SICP 学到什么。因为第一次看时觉得前面都太简单,但跳到后面又太难。后來水平上來了想看看翻了下发现全都是在別的地方 (龙虎鲸, An Object Theory, TAOCP, Modern OS, Compile with Continuation 这些经典书目) 都看过了己经不用专门看这本书了。

3赞

个人比较建议从 Emacs Lisp 入手,先学会基础的编程,再去学 Common Lisp,大体路线如下:

  1. 编辑器入门:跟着过一遍 emacs tutorial (我想楼主可以跳过这一步)
  2. 编程入门:过一遍 Emacs 自带的 An Introduction to Programming in Emacs Lisp,学习编程(习题尽量做)
  3. Emacs 插件编程入门:过一遍 Writing GNU Emacs Extensions,这本书有些过时了,不过用来了解 Emacs 插件的结构还是不错的
  4. 一点实践:读一些自己感兴趣的、小巧的 Emacs 插件的代码(开始阶段,尽可能避开 org-mode/magit 这类比较复杂的),特别注意一下 elisp 里 cl-* 的用法
  5. 进阶:之后再读 Practical Common Lisp 之类的书,就没什么障碍了

至于 SICP,确实像上面有人说的,涵盖了计算机科学方方面面的基础,但也因此略显大而无当,我比较建议在第 5 步的时候再去看,起到补全知识体系的作用。

5赞

你说的那几本可都是大部头,从这个角度讲sicp确实值得一读

2赞

我从sicp里学到的主要是怎么使用DSL来解决问题。

在此之前,我对程序设计的理解主要来自《设计模式》,再多一点可能就是项目经验。比如:之前做过类似的项目,然后把它修修改改变成自己的,或者 先看看别人是怎么做的,然后依葫芦画瓢,或者从别人那里摘一些代码出来。。。我从来没有意识到这些技术背后的语言概念。

举个例子:多项式算术(sicp里有这个例子)

像这种问题,把它单独作为一道面试题拿出来。如果你以前刷到过,确实可以独立做出来;如果没刷到过,那么可以先看看别人是怎么做的,有了印象,下次再遇到,相信你也一定能做出来。

问题在于:

在读sicp之前,你可能不会意识到这类问题可以构成一种DSL(更别提它背后的代数结构了)。

sicp里的大部分例子本质上都是DSL。

注:这并不是说《设计模式》没有用。其实《设计模式》里也讲到过 组合、解释器、访问者等模式,但它没有从语言的角度去解释它们,sicp相当于给了一种新的思路。。

3赞

十分感谢!听您这么一说,我瞬间感觉道路清晰了不少。

十分感谢大佬的回复,多谢!

你龙虎鲸都看了一遍??image

我觉得看其中一本龙书就很挑战了,所以这就是我编译原理学得不深入的原因嘛image
(反正我又不是CS的~ 手动狗头)

SICP本来定位也就是MIT给CS新生准备的第一门课呀,泛而不深,给学生一个全局的概念。我导师当年是EE的本科,偏数学的方向,所以本科学的CS课不多,所以SICP对他们来说就尤其好了,值得啃,之后再辅以一门专门的语言课(C/C++当时),基本就够用了。很多工科学生没时间一步步学那么多CS课的,从这个意义上讲,SICP是相当好的。

1赞

龙书讲的对写函数式语言编译器没啥参考价值,随便刷刷过去的。 虎书看的 SML 版本,Appel 还是 SML NJ 的作者。 鲸书不写 codegen 就没用。

1赞

哈,虽然我也是小白,不过我觉得Little schemer挺好的,不过说实话,我看little schemer感觉像是在做练习册。。。看完问题先自己造轮子 :rofl: 然后看看书上的思路,挺有意思的,说实话有点上瘾。
不过我用的是racket来学习,可能情况和楼主有点不同。

1赞

不喜欢SICP还可以考虑看Essentials of Programming Language aka. EOPL.

比较喜欢他的任何复杂程序都必然包含一个解释器的观点

SICP 的中文翻译质量大家觉得怎么样?(裘宗燕还是有一定声望的)
我看了下英文版感觉生词比起 Practical Common Lisp 多好多,所以看PCL英文版问题不大
因为PCL中文翻译得太渣了,也是很多人觉得Common Lisp 太难学的原因之一吧。。。