优秀的Common Lisp代码示例是什么?

62

我已经学习了足够的Common Lisp知识,可以勉强编写一个应用程序。我已经阅读了Seibel的“Practical Common Lisp”。

为了理解Common Lisp的惯用法和真谛,我应该阅读哪些库或程序?

7个回答

41

CL-PPCRE 经常被引用作为良好的示例,这是有充分的理由的。实际上,Edi Weitz 的任何一个库都是不错的阅读材料,但 CL-PPCRE 特别聪明,是个有用而令人印象深刻的库。此外,许多 Common Lisp 实现主要是以 CL 写成的。选择通常在 CL 中实现的某些部分,并比较不同实现如何处理它,可能会非常高效。特别是,在标准中实现的一些大型有用宏系统的最佳示例之一是 Loop。如果你真的雄心勃勃,你可以比较几个 CLOS 实现。

如果您对某个计算领域特别感兴趣,值得一提,这样人们就可以根据那个领域定制推荐。


1
Sacla实现了Common Lisp的相当大一部分,而且是用Common Lisp编写的,因此它是您所建议的一个很好的例子。 - jmbr

29
这是另一本书,可能不完全符合您的需求,但Peter Norvig的人工智能编程范式包含了许多写得很好、较小的Common Lisp程序。尤其是在前几章,它的代码并不完全自然,因为像Practical Common Lisp中的代码一样,它专注于教授如何在CL中编程,但仍然值得一读。它还包含了一些构建其他语言的优秀示例,并提供了有关如何提高CL程序性能的宝贵建议。

1
那是一个非常好的推荐。书中的代码通常都很不错,但Norvig会从一章到另一章地越来越详细地解释如何编写更好的代码。他从基础版本开始,然后展示如何改进它。 - Rainer Joswig
2
我完全同意这个观点。《编程范式的艺术》是我最喜欢的关于编程的书籍之一,尽管在我看来,书名有点误导人。关于这本书,我想说的一件事是,它的风格对我来说有点“老派”或者学术化。但这并不是批评- 在我看来,时髦的CL习语在过去的10-15年里已经发生了一些变化,但是代码不遵循时尚也没有什么问题。 - Tagore Smith

12

其他推荐(PAIP和CL-PPCRE)也非常优秀。我还建议熟悉Alexandria的代码,并查看GBBopen


9

《元对象协议的艺术》是一本写得最好的代码的书。


5

LISP(Lisp In Small Pieces)是一本很好的书,展示了clossette(小型对象系统)和一些编译器相关的内容。毫无疑问,Norvig的书非常棒。

我也非常喜欢《构建问题求解器》,但代码有点粗糙。我不习惯在参数列表中绑定动态作用域变量。但这让尝试“预编译”区分网络变得更加有趣。这本书提供了对Norvig代码的另一种方法;我仍然认为Norvig的代码更加“整洁和清晰”(易于阅读和理解,同时还富有创意)。

《构建问题求解器》应该带有一个警告标签,例如“你需要一些阿司匹林”。当我最终“理解”rms和Sussmans的依赖性回溯时,感觉像是一道闪电击中了我的脑袋。编译pdis也很出色。非常棒。我只希望我能记住它们...


2

我喜欢SBCL代码。


2

我能提供的唯一建议就是编程。这就是我所做的。

我做了两件事情。第一,我解决了一个我熟悉的问题,一个单元测试框架,并将其扩展到包括测试套件,以便理解宏编写。

我做的第二件事是玩弄CL中的基本对象。宏,闭包和风格。

还有不要忘记从Lispers那里获取关于你的代码的反馈。

(defun ugly-lisp-code? () ())


2
你说得完全正确,要想熟练掌握编程,必须实际动手编写代码。然而,就像作家一样(你也提到了这一点),我们有时需要看看什么是“好”的,以便我们能够模仿它。 - Frank Shearar
不仅仅是做得“好”,而是尝试从命令式转向声明式的“好”。 - Gutzofter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接