我应该学习Lisp的哪种方言?

我应该学习Lisp的哪种方言?,lisp,dialect,Lisp,Dialect,我知道Lisp有几种不同的方言。既然已经决定学习Lisp将是一种新的智力体验,我想知道学习哪种Lisp方言,以及为什么 有一种比其他的更受欢迎吗?其中是否有一个更“完整”,如中所述,有更好的文档记录和支持?这种方言的优缺点是什么?我之所以说Scheme,完全是因为Scheme,这是我读过的最有趣但又非常难的书之一。我更喜欢CL,因为我喜欢面向对象编程,CLOS是最好的对象系统。我在学校学的。这是一次很棒的学习经历,我永远不会忘记函数式编程的基础知识。选择哪个版本的LISP可能无关紧要,只要您了解

我知道Lisp有几种不同的方言。既然已经决定学习Lisp将是一种新的智力体验,我想知道学习哪种Lisp方言,以及为什么


有一种比其他的更受欢迎吗?其中是否有一个更“完整”,如中所述,有更好的文档记录和支持?这种方言的优缺点是什么?

我之所以说Scheme,完全是因为Scheme,这是我读过的最有趣但又非常难的书之一。

我更喜欢CL,因为我喜欢面向对象编程,CLOS是最好的对象系统。

我在学校学的。这是一次很棒的学习经历,我永远不会忘记函数式编程的基础知识。选择哪个版本的LISP可能无关紧要,只要您了解其实用性的核心——无状态lambda演算


这里有一篇有趣的文章介绍了它的编程入门课程。

而且Clojure最近也赢得了很多关注,这是有道理的。伟大的数据结构,非常好的并发支持(这让Scheme和CL相形见绌),以及一个伟大的社区。它也比较简单,CL至少和C++一样复杂。
这并不是说我不喜欢CL或Scheme。我和SICP一起学习了这个计划。CL带我去了Clojure。我想这完全取决于你的目标。如果你想学习非常实用的Lisp语言,可以选择Clojure。否则CL或Scheme都很棒。

我可以推荐使用Common Lisp。这种组合是快速、强大、成熟和有良好记录的。

至少在一开始,我会说它们都是。最终,您可能会对Scheme或CommonLisp产生偏好,但它们都有足够的差异,因此最好处理所有存在的问题

例如,Scheme有continuations,了解Scheme中的continuations是件好事,即使它们可以在CommonLisp中实现


了解词法范围和动态范围之间的差异很重要,如果您同时学习Common Lisp和elisp,您将发现两者的含义。

您希望在简单性和简洁性、吸引人的功能以及允许您(为自己)编写有趣和有用软件的平台之间找到平衡作为学习工具。(这最后一步将让你持续学习更长时间。)以下是一些可能性:

  • 方案。可能是所有方言中最干净的。这无疑是将LISP翻译成Scheme的原因。第五个方案标准规范,本身就是一个精彩的教育;这可能是我读过的最好的语言和库规范,也是最短的、相当全面的规范。这个(现在的Racket)平台包括一个相当不错的解释器和编译器,非常适合编写脚本,还有一些可视化工具,使它非常适合学习

  • 通用Lisp。可能是最可移植和最全面的变体,如果您想编写商业软件之类的东西,这很可能是您想要的。该标准定义了广泛的库,除此之外还有更多的库,它已经提供了,这可能会教给您比任何OO语言都更多的OO知识,而且一些编译器非常好。缺点包括Scheme没有的一些缺点(例如为引用函数的变量提供单独的名称空间),不干净和简单(就像任何必须具有扩展并做出必要妥协的情况一样),没有卫生的宏,和Scheme相比,它更强调递归

  • Clojure.这在JVM上运行,这可能会给Java开发人员提供支持。它有一些缺点(例如,您必须显式地请求尾部调用优化,尽管如果将TCO添加到JVM中,这一点可能有一天会改变)。宏虽然不卫生,但确实有一些功能可以帮助您避免捕获变量,因此如果您真的想捕获变量,您可以捕获变量,同时比CL中意外捕获变量的风险更低。您可以轻松访问所有Java库;对于“真实世界”的代码来说,这可能是一件好事,而且在学习方面也毫无意义。它有一组用于持久数据结构的库和对STM的支持,从并发的角度来看,这使它非常有趣;如果您有兴趣了解更多处理并发和并行编程的新方法,这可能是您的最佳选择。Clojure似乎与Java一样适用于大型生产应用程序,从某种意义上说,它将有能力完成生产应用程序中的“难看的事情”,而这些事情是你在学习时不想做和不想做的

  • Emacs Lisp。就Lisp而言,这不是一个更好的例子。它最大的缺点之一是动态范围,但还有许多其他缺点。但是,如果您是Emacs用户,这可能是您可以学习到的改善编辑器使用情况的最强大的工具。但是,除了如何扩展Emacs之外,学习Emacs Lisp还能学到多少东西,这对我来说是一个悬而未决的问题;我不知道像高阶函数这样的有趣技术在Emacs Lisp中实际使用的频率有多高

  • 2018年更新

    我写这篇文章已经快十年了,Lisp语言家族现在似乎在程序员的普遍意识中获得了巨大的吸引力。这其中的大部分似乎与Clojure有关,Clojure不仅本身已成为Lisp的一种完全独立的方言,引入了许多自己的好想法,而且现在有了一个几乎相同的针对JavaScript的版本,并启发了许多其他针对其他平台的Lisp