我应该学哪个 Lisp?

我应该学哪种 Lisp (方言) ,为什么?

CL 和 Scheme 之间的碎片减缓了理解(至少对我来说是这样!)。

所以,请告诉我“真正的答案”!

我试图阅读特征比较,他们似乎陷入了深奥的(我不完全理解) ,比如方言是否完全尾部递归,等等。我希望你们所有人(集体)能够澄清这些不透明的差异。

我喜欢的东西

良好的库支持、良好的环境和 Unicode 支持。

我不喜欢的东西

一开始很有用,但是会影响长期学习的功能。


最新情况

  1. 我大部分时间都在使用 MzScheme,一旦我得到了 readline 支持,我就非常喜欢它了。我没有在 Unix 上运行 GUI,所以对我来说它似乎是一个很好的环境选择。

  2. 我也很高兴 Clojure 有一个易于安装的。Debian 上的 deb 包,所以玩起来容易多了。这是个大胜利。尽管下面有些人很容易生气,但低门槛是一种胜利。我喜欢被抱抱。

  3. 在阅读了更多的 SICP之后,我确实更好地理解了与尾递归有关的问题。

19200 次浏览

随便挑一个,学着点。当你发现差异的时候,如果你第一次选错了,你就可以再次做出选择。

Clojure 是 Lisp 的一种积极发展的现代方言。它基于 JVM,所以所有的 Java 库都可以立即使用,因此也支持 Unicode。

这是一个选择,而不是唯一正确的答案。

对我来说,Scheme 的基础理论更有说服力。PLTScheme (现在称为 Racket)是迄今为止我发现的最活跃的 LISP。不幸的是,它有大量的类型,模糊了 Lisp 的美丽。

我希望看到像弧成功的东西,但似乎不太可能。

Lisp 最大的问题是没有人人都遵守的最高标准。您不仅需要在 Common Lisp 和 Scheme 之间进行选择,还需要在几个不兼容的 Common Lisp 实现和几个不兼容的 Scheme 实现之间进行选择,以及在 Arc 和 Clojure 之类的小东西之间进行选择。

我建议从 MzScheme开始。它很受欢迎,并且得到了积极的开发,它有很多库提供了现代编程环境的特性,而且 Scheme 比 Common Lisp 要简单一些(不是说更好,只是更简单)。

Contra Chuck,Common Lisp 的一个优势是它有一个实现所坚持和追求的标准,这样你就可以在很大程度上使用 SBCL (具有优秀的类型检查和推理)进行开发,然后,比方说,作为一个可执行文件与 C 库(使用 ECL 或其他)或作为一个。Jar 使用 Java 库(使用 ABCL) ,或者使用 Mac 或 Windows 本机 GUI (Clozure,两者都有)。Common Lisp 在架构、实现和时间上都具有惊人的可移植性,Common Lispers 在语言的支持下努力保持这种方式。作为一个例子,非标准化行为的一个愚蠢的分歧是“这是一个特殊的变量吗?”所以我在我使用的实现中回答了这个问题:

#-abcl
(defun special-variable-p (symbol)
#+ecl(si:specialp symbol)
#+ccl(proclaimed-special-p symbol)
#+sbcl(equal '(:special t)
(multiple-value-list-int:info :variable :kind symbol)))

在读取时,它在 ABCL 上减少到零(它已经有这个了) ,在 ECL 上减少到 (defun special-variable-p (symbol) (si:specialp symbol)),等等。这样我就可以把这个放进我的。Rc 文件,并使用 REPL 中的公共函数。但这并不重要: 这不是 穿线各种支持的网络交谈循序程式图书馆。最后一个示例只有一个 #+sbcl/#-sbcl,即使它运行在五个实现上。因为它依赖于经过仔细移植的代码。

但是,允许这种(和其他)优势的因素也给学习者带来了挑战: Common Lisp 是一种非常庞大的语言。它不是像我做的 Clojure 那样,一两个星期就能搞定的东西(但是我的 Clojure 已经随着即将推出的突破性改变而衰退了——这种语言虽然有很多自身的优点,但是却让我想起了我喜欢 Common Lisp 的很多地方因此,你应该阅读大量的 这一页,并保持远离超规格按键(对我来说,M-x hyperspec RET do-symbols RET是足够接近圣经。)考虑买几本书。我有 实用 Common Lisp,刚刚得到的 放过 Lambda,并将购买 PAIP真正现在很快。

但是,即使 Common Lisp 是 正确答案,你也不会完全浪费时间去“挑选”一些看似华而不实的替代品(——“欺骗性”,因为常见的 CL 并没有向你展示它的宏所能做的一切,而且它比任何人都拥有更多的 各种宏。通常比较的是糟糕的 CL 和语法优化的替代 X)。您仍然可以学习基础知识,您仍然可以使用在 SICP、 On Lisp、 小阴谋家等中可以读到的大部分内容。口齿不清,即使是错误的口齿不清,也比不口齿不清好。(但是您将花费一些时间来实现部分正确的 lisp,很糟糕,在错误的 lisp 中。元绿纺。)

学习 elisp,以便扩展 Emacs。

如果您希望避免 flamewar 并且喜欢使用库,那么可以使用 Clojure。它很小,很快,社区是有益的,非教条主义的。这是 Lisp 减去了20世纪80年代那些荒谬的废话。它有一个 BDFL,如果你有一个好的想法,有一个该死的好机会,它将得到实现的语言。

我玩过 Common Lisp,它是一个美丽的东西。我已经在 DrScheme 中完成了前3章和 SICP 中的元循环评估器,这也是一件美妙的事情。当然,学习这些知识会让你受益匪浅。

但是,随着时间的推移,我已经把小语言放在心上了。我不会说谎,我喜欢 Javascript,我喜欢 C 语言(如果每种语言的核心都不是 C 核心的话,那真是见鬼了) ,因为它们都很小。

Clojure 很小,很优雅,是我们这个时代的语言。

我认为你要么想要 Common Lisp 或 PLT Scheme (现在称为 Racket)。

前者具有很大的自由度和强大的功能(一开始可能会让您不知所措) ,而后者则带有大量的库、匹配的教程和一个集成良好的 IDE。

推测: 当你学习你的第一个口齿不清,不要学习一个你会最终使用结束开发。

学习弧线。所有这些都是 lisp 中“难以理解”的东西——闭包、宏、延续,没有 Clojure 的 Java 互操作复杂性、 CL 的名称空间混淆或 Scheme 的名称碎片。如果你全身心投入,你可以在一个周末学会所有这些东西。如果你敏锐又专注,一夜之间。

而且它会使学习所有其他口齿不清的 很多更容易。

Clojure 是 LISP 的一个很好的方言,它促进函数式编程。它在 JVM 上运行,因此您可以访问您可能已经习惯使用的任何 Java 库。该网站有大量的文档和 视频来帮助您学习。另一个好处是,它真的很容易安装,不像其他许多方言。

如果您只是想了解 埃马克斯(特别是 EmacsLISP)这个概念,那么它是另一种选择。它提供了令人难以置信的文档、教程和大量的代码示例。视频也很容易找到。Emacs 最大的好处之一就是编辑器是用 LISP 编写的,所以编辑器对运行、编辑和调试 LISP 自然有很好的支持。此外,您可以扩展编辑器,使您每天的文本编辑需要更容易 同时您学习 LISP。

我是 Scheme 的粉丝,但是我已经超过10年没有使用 Scheme 做任何事情了。

就像其他人说的,随便选一个就走。

那里几乎没有真正的选择,无论是 SBCL、 Clojure 还是 PLTScheme。

和 Clojure 一起去。它是一种令人惊叹的语言,可以完全访问任何 Java 库。它已经开发了2年多,已经有3个 IDE 插件在开发中,并且有一本关于它的书将在4月份出版。它非常快,非常优雅,非常漂亮。你选 Clojure 不会错的。

你知道... 当我对 Lisp 感兴趣的时候,我也认为我必须做出选择。然后,在阅读和询问了很多之后,我最终选择了 Common Lisp。不是因为它在某种程度上比 Scheme“更好”,而是因为它有一些特性,我知道我可能会在接下来的2-3年里在我的项目中使用它:

  • 一个非常有效的数值计算编译器(SBCL) ,
  • 条件系统,还有..。
  • 我必须承认,SLIME 在这个决定中也发挥了重要作用。 : -)

因此,如果我是你,我会开始学习每种语言的一点点,找出每种语言的优缺点(我的意思是,那些与你最需要/最想做的事情相关的) ,这样你就可以选择一种。您可能会发现,以后还会学习其他语言(我碰巧在学习 Common Lisp 一年之后不得不学习更多 Scheme)

至于 Arc Clojure 和 Lush 这些我不知道。我想同样的论点也适用于它们... ... 我不想在它们上面投入太多的原因是: Arc 似乎对数值计算不感兴趣,而 P · 格雷厄姆似乎痴迷于代码大小(以至于他的代码不可读) ; Clojure 看起来不错,但我不喜欢 JVM。还有 Lush... ... 除了使用动态作用域之外,该语言的编译版本和解释版本是 非常不同的——而且不能编译递归函数。所以,对我来说,它要么是 Scheme,要么是 Common Lisp。

我不知道 Lisp,但以下是我认为 PLT Scheme (现在称为 Racket)是一个不错选择的原因:

  1. 非常好的文档
    Http://download.plt-scheme.org/doc/html/

  2. 博士计划
    DrScheme 是一个令人惊叹的编程环境,它提供了编译器、步进程序、语法检查器、 REPL、无数语言支持,并且是可扩展的。这让整个体验变得有趣。参见一些截图

  3. 社会人士的支持。
    社区对他们的语言非常热情,也非常支持。如果您有任何问题,邮件列表,小组和论坛是可用的。即使是作者也是非常非常容易接近的。

  4. 持续研究
    PLT 是非常积极的,并继续使他们的工具越来越好。你可以期待从实验室中得到很多创新。例如。我对使用这个 http://blog.plt-scheme.org/2009/05/typed-scheme-20.html 感到非常兴奋:

  5. 免费书籍和有趣的教程,让你开始。
    Http://www.htdp.org/
    Http://world.cs.brown.edu/

  6. 良好的模块和广泛的库。
    Http://www.cs.utah.edu/plt/develop/
    Http://planet.plt-scheme.org/ 另见 < a href = “ http://docs.plt-scheme.org/”rel = “ nofollow noReferrer”> docs

如果你正在学习的方案,给 博士计划一个尝试。

选择除了 Clojure 之外的任何东西,然后使用它,这样您将处于一个更好的位置,可以在以后进行评估。

您将这个问题表述为哪个 Lisp 是学习 Lisp 的最佳媒介,对我来说,它必须包含一个由低级原语构建的 Lisp,而 Clojure 的大部分是用 Java 编写的。

如果您已经表述了这个问题,那么哪个是开始一个新项目的最佳 Lisp,那么 Clojure 可能是最佳选择。