Lisp 相关的书单

纵向得看 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,或者用其他比较熟悉的语言,不然搞不清学习的重点。

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

为什么?能把 rnrs 搞清楚的人,还真是无聊

对于一个Scheme的初学者,开始学习的时候,很难分辨哪些需要学,哪些可以先放下。所以,会遇到很多的坎。使用,自己熟练的语言去学习,就省去这些麻烦。这是我一直迷惑,后来得出的个人看法。

同意一半:如果说学习一个概念,不一定要强行去某个语言的语境下学习,(在合适的情况下)也可以通过自己熟悉的语言学习。

不同意一半:学 Scheme 不需要学 rnrs,因为你是用各个实现来运行你的代码,而各家实现都加了自己的功能。了解 rnrs 和 srfi 唯一的用处就是在语言撕逼的时候你可以举出一些特性出来。根据我的观察,各家 scheme 实现的文档都可以用来入门。虽然我觉得入门 scheme 一下午拿着一本 The Little Schemer 就学完了。

The Little Schemer和它的续篇的内容,没有我说的语言上的顾虑问题,在某个Scheme的实现中实践就好了。至于,一个下午就能学完,对于一个初学者来说,我觉得有点夸张。除非已经有函数式开发的概念。这两本书看完之后,包括CISP也学完之后,用Scheme开发的话,又要学习哪些呢?这个才是我迷惑的地方。

比喻我用的是chez,[ Chez Scheme Version 9.5 User’s Guide ]就得花时间去看一下。并且,[ The Scheme Programming Language ]也得时不时去参考。这其实是学习函数式开发之外的东西。

若我用js的话,就可以直接在node下做实际的开发了。不用再去花时间去学习一套新的库(我把RNRS,chezscheme自己实现的库,都统称为库)。这些库,依存与Scheme的实现。有必要去学习吗?我不是反对什么思想,而是自己都迷惑,花时间在这上面,有什么收获呢?

我目前对RNRS和其它具体实现的理解,无非是通过Scheme语法实现的,而且功能上,别的语言都有现成的实现。除非超爱用Scheme去开发,对于只是学习函数式开发思想的人,我的想法还是用自己熟悉的语言比较好。

反正我是对Scheme的学习有点迷失方向了。

11 个帖子被拆分到新主题:Domain theory & denotation semantics

作为纯菜鸟, 我确实觉得 little schemer 里面 Y 组合子讲的很好. 我之前听过 Y 组合子, 所以看书的时候尝试自己写一下(并没有写出来, 捂脸). 书里的详细的过程恰好可以填补一些困惑.

我偷藏到自己服务器了~ 《Common Lisp Recipes》

2 个赞