Lisp 相关的书单

Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp

我没电子书版的,而且这本算是进阶读物了。

虽然书名比较吓人,但是这本书其实就是讲如何解决复杂问题的。

3 个赞

本来以为 Common Lisp会是一个入门的绝佳选择,会比较简单。看了《实用common lisp编程》,我勒个去,这书怎么读啊?

大量的东西不经介绍,直接使用,连给我喘口气的机会都没有!晕菜了!

入门从clojure简单啊,关键是有生态,很好实践。

求中文读物,我英语不怎么好

上面出现过好些次的 The Little Schemer 有中文译本

update: add emacs book

补充一个 EusLisp(和EuLisp没有任何关系),ROS(机器人操作系统)平台上的Lisp开发语言,2020年的今天仍然处于活跃状态。

有没有什么进阶的CLOS读物可以推荐?读过PCL和Common Lisp Cookbook的CLOS章节,都比较简略,讲了语法,但没有深入讨论基于CLOS的模式,设计方法,最佳实践,以及这些方法如何最大程度的发扬CLOS的独特优势。因为缺少深入的资料,手头的东西看完以后处于可以用CLOS编写拙劣的C++代码的程度,比较尴尬。

PS. 我知道CLOS和传统OO语言的主要区别是多重分派,但是除了可以用这个比较简单的实现visitor模式之外,不知道还能干嘛,尤其是不知道如何基于multimethod来设计API

纵向得看 pre Common Lisp 的 LOOPS 和 Flavors,EuLisp 的 TELOS,和 AMOP

  1. The LOOPS Manual
  2. Reference Guide to Symbolics Common Lisp: Language Concepts
  3. An implementation of Telos in Common Lisp
  4. A Metaobject Protocal

橫向对比 Eiffel, Smalltalk, Sather, BETA

  1. Object-Oriented Programming: A CLOS Perspective
  2. A Theory of Objects

模式是沒有模式的。不同项目写的 Lisp 代码区別相当大。Peter Andrews, Robert Constable, Peter Norvig, Guy Steele 我看过他们写的 Lisp 风格可以说是各不一致,对 CLOS 的取舍更是完全不同。反正对模式我是沒有什么执念的。

真不知道要怎么设计去套用 Design Patterns 也沒什么问题。肯从现成代码学习的话推荐 robert-strandh (Robert Strandh) · GitHub 的项目,风格相当成熟,不是青头可以比的,而且是重度偏好用 CLOS 的现代范例,沒有 90 年代用 CLOS 写的老项目的 code smell。还有 Shinmera (Nicolas Hafner) · GitHub 相对 conservative 的,比较朴实的风格。

但是说实也可以放弃 design pattern 用偏向 functional programming 的写法,只要搞懂 method combination (比如看完 AMOP),然后把 multiple dispatch 当成 polymorphic function 来写就行了。

5 个赞

The Little Schemer这本书挺有名,除了第九章的Y 组合子需要花点时间,其它的难度倒不是很大。 但它的后续版本,The Seasoned Schemer 和The Reasoned Schemer好像没它那么有名。 我不清楚的一点是,它后续篇的内容是不是,大部分在SICP里能找到? 谁给解释一下

不是,The Little Schemer 和 The Seasoned Schemer 还可以说是介绍通用的编程理念。后面的 The Reasoned Schemer, The Little Prover, The Little Typer 都是对一个特定的领域进行介绍,和 SICP 没有什么重复度(虽然这些书我都没怎么看过)

好的,非常感谢。这样的话,我先把 The Seasoned Schemer看完再继续SICP吧。听说,大部分人只学习到SICP的第三章。也就是说,后面两章过于理论化的原因?

个人觉得Little Schemer中讲applicative Y combinator的部分讲的并不好,这可能是出于对幼龄读者的一种理解上的处理,但是对于成年的读者来说其实没有很大的必要。
作为入门书籍(给大一计算机系新生或者有这方面兴趣的孩子)我觉得是很好的,但是对于成年读者专业读者来说,有些许啰嗦。

The Little Scheme的第九章写的确实不太好,我是看别的资料才明白Y combinator的。

另外,我对函数式的学习方法有些不理解的地方。

很多人推荐学习函数式开发,用Scheme或Lisp。但我认为,这个因人而异。因为,学习Scheme就涉及到RNRS之类的学习。对于,初学者是分不清这些和函数式开发有什么关系,浪费不少时间。并且,S表达式也不是函数式学习所必须的,虽然不是困难。学习一门新语言固然是好,但为了学函数式而去学一门语言,明显拉长了学习时间。

你说的是 JS 函数式开发,和函数式编程有什么关系么?

不都是从wiki上先学一下lambda calculus开始的么,应该是理论先行吧。。。
还是说我的路线出现了偏差。。。

一般不该从 cartiain closed category/simply typed lambda calculus 开始么,pure untype lambda calculus 对学现在多数编程语言没什么用。

啊!(一个啊字体现出了菜鸡无限的敬仰与懊悔)
原来是这样!

这正是我要表达的意思,若js已经很熟练了就用js,或者用其他比较熟悉的语言,不然搞不清学习的重点。

我也认为是理论优先,并用自己擅长的语言来实践,比较节省时间。