我应该学习哪个Lisp?

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

CL和Scheme之间的碎片化速度减慢(至less对我来说!)。

所以,请给我“真实的答案”!

我试图阅读function比较,他们似乎陷入了深奥(我不完全理解),像方言是否完全尾recursion,等等。 我希望你们能够(统称)把不透明的差异弄清楚。

我喜欢的东西

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

我不喜欢的东西

论战。 在开始时有用的function,但干扰长期学习。


更新

  1. 我一直在使用MzScheme,一旦我获得了readline支持,我很享受。 我不在Unix上运行GUI,所以对我来说这似乎是一个很好的环境选项。

  2. 我也很高兴Clojure在debian上安装了一个易于安装的.deb软件包,所以玩起来容易多了。 这是一个很大的胜利。 尽pipe下面有些相当容易愤怒的敌意,但低进入门槛是一个胜利。 我喜欢被勺子。

  3. 在阅读了更多的SICP后 ,我更好地理解了尾recursion的问题。

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

这是一个select,而不是一个真正的答案。

如果你想避免flamewars,你喜欢图书馆去与Clojure。 它很小,速度很快,社区是有益的,非教条式的。 Lisp减去了1980年代的荒谬之处。 它有一个BDFL,如果你有一个好主意,有一个很好的机会,将实施到语言。

我玩过Common Lisp,这是一件很美的事情。 我已经完成了DrScheme中的前三章和SICP​​中的Metacircular Evaluator,这也是美好的事情。 当然,从这些学习中你会受益匪浅。

但是,随着时间的stream逝,我已经来到了我心中珍藏的小语种。 我不会撒谎,我喜欢Javascript,我喜欢C(如果每种语言都没有C核心的话,那么该死的),因为它们很小。

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

Contra Chuck是Common Lisp的一个优点,它有一个标准,执行坚持和争取,这样你就可以在很大程度上用SBCL(它有很好的types检查和推理)进行开发,然后部署成一个可执行的C库(使用ECL或其他),或者使用Java库(使用ABCL)或使用Mac或Windows本机GUI(使用Clozure).jar。 Common Lisp在架构和实现上都是非常可移植的,并且随着时间的推移,Common Lispers在语言的支持下努力保持这种方式。 举例来说,非标准化行为的一个愚蠢的分歧是“这是一个特殊variables吗?”的问题。 所以我通过我使用的实现来回答它:

 #-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))) 

它在读取时减less到ABCL上的任何内容(它已经这样做),在ECL上(defun special-variable-p (symbol) (si:specialp symbol))等等。 所以我可以把它放在我的.rc文件中,并在REPL中使用通用函数。 但这不是非常重要:这不是线程化或各种支持的networking或通信顺序进程库 。 最后一个例子只有一个#+sbcl/#-sbcl ,就像它在五个实现上运行一样。 因为它依赖于被仔细移植的代码。

但是,这个(和其他)优点是什么也给学习者带来了自己的挑战:Common Lisp是一个非常大的语言。 在一两个星期里,你不可能像在Clojure那样sl </s>不前(但是我的Clojure已经在随着突然的变化而衰退 – 这种语言尽pipe沉重,有着自己的优点,但却提醒我)所以你应该阅读很多这个页面 ,并保持HyperSpec的一个按键(对于我来说, Mx hyperspec RET do-symbols RET对于圣经来说已经足够接近了),并且思考关于购买几本书。 我有Practical Common Lisp ,刚刚拿到了Lambda ,现在马上就要买PAIP了。

但即使Common Lisp是真正的答案 ,你也不会完全浪费你的时间,只是“挑选”一些看似浮华的select( – '欺骗',因为普通的CL没有告诉你它的macros能做什么,比任何人都有更多的macros ,通常的比较是坏CL和语法优化的替代X)。 你仍然可以学习基础知识,你仍然可以使用SICP,Lisp, Little Schemer等中的大部分内容。一个lisp,即使是错误的lisp,仍然比非lisp更好。 (但是,你会花一些时间来执行正确的lisp的部分内容,很糟糕的是,在错误的语气中,Meta-Greenspun。)

Clojure是LISP推动函数式编程的伟大方言。 它在JVM上运行,因此您可以访问任何您可能习惯使用的Java库。 该网站有很好的文档和屏幕录像,以帮助您学习。 另一个优点是安装起来非常简单,不像许多其他的方言。

如果你只是想看看Emacs (EmacsLISP具体)的概念是另一种select。 它配备了令人难以置信的文档,教程和大量的代码示例。 Screencasts也很容易find。 Emacs最大的好处之一就是编辑器是用LISP编写的,所以编辑器自然而然地对LISP的运行,编辑和debugging有很好的支持。 另外,您可以扩展编辑器,使您学习LISP时更轻松地进行文本编辑。

只要select一个,并学习它。 当你找出差异的时候,如果你第一次select的不好的话,你会有机会再次select。

Lisp最大的问题是没有任何人压倒一切的标准。 你不必在Common Lisp和Scheme之间select; 你必须在Common Lisp的几个不兼容的实现和Scheme的几个不兼容的实现之间select,以及Arc和Clojure等其他一些小东西。

我会build议从MzScheme开始。 它很受欢迎,它的开发非常活跃,它有很多库提供了现代编程环境的特性,Scheme比Common Lisp更简单一些(不用说更好,更简单)。

去Clojure。 这是一个惊人的语言,可以完全访问任何Java库。 它已经进行了2年多的开发,已经有3个IDE插件正在开发,并且在4月份出版了一本关于它的书。 这是非常快速,非常优雅和美丽。 你不能用Clojure出错。

对我来说,Scheme的基础理论更有说服力。 到目前为止,PLTScheme是我find的最活跃的LISP。 不幸的是,它打字的泛滥掩盖了Lisp的美丽。

我很想看到圆弧成功,但似乎不太可能。

看看IronScheme 。

学习elisp,以便扩展Emacs。

猜想:在学习第一个lisp的时候,不要去学习最终的开发。

引理:学习弧。 在lisp – closures,macros,continuation中,所有这些都很难“理解”,没有Clojure的Java互操作复杂性,CL的命名空间混乱,或Scheme的名字碎片。 如果你是专注的,你可以在周末学习所有这些东西。 如果你是敏锐而专注的,在一个晚上。

这会让所有其他的学习变得更容易。

我不知道Lisp,但是inheritance人为什么我认为PLT计划是一个不错的select:

  1. 真的很好的文件
    http://download.plt-scheme.org/doc/html/

  2. DrScheme
    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/也见文档;

如果您正在学习Scheme,请试试DrScheme 。

你知道…当我对Lisp感兴趣的时候,我也想过要select。 然后,在阅读和问了很多后,我select了Common Lisp。 不是因为它绝对比“Scheme”更好,而是因为它具有我知道我可能会在未来2 – 3年内在我的项目中使用的function:

  • 一个非常有效的数值计算编译器(SBCL),
  • 条件系统,和…
  • 我不得不承认,SLIME在这个决定中也扮演了重要的angular色。 🙂

所以,如果我是你,我会开始学习一点点的每种语言,并找出每个语言的相对优势和弱点(我的意思是,那些与你最需要/最想做的事情有关)你我可以挑一个。 你可能会发现后面还会学到另外一个(发生在我身上 – 在学习Common Lisp一年后,我必须学习更多的Scheme)

至于Arc,Clojure和Lush,并不知道那些。 我认为同样的观点也适用于他们……我不想在他们身上投资太多的原因是:对于数值计算来说,弧似乎没有什么意思,并且P. Graham似乎被代码大小所迷惑使他的代码不可读的一点); Clojure看起来不错,但我不喜欢JVM。 而郁郁葱葱…那么,除了使用dynamic范围,编译和解释版本的语言是非常不同的 – 你不能编译recursion函数。 所以,这是Scheme或Common Lisp给我的。

我认为你要么需要Common Lisp或PLT Scheme。

前者具有很大的自由和权力(最初可能压倒你),后者带有一堆库,相匹配的教程和集成的IDE。

我是Scheme的粉丝,但是我已经做了10年多的计划。

像其他人所说 – 只要select一个就可以了。

那里很less有真正的select,无论是SBCL,Clojure还是PLTScheme。

select除Clojure以外的任何东西,随它去,你将会处于更好的位置来评估。

你说这个问题是Lisp是学习Lisp的最佳媒介,对我来说,必须包含一个由低级原语构build的Lisp,而Clojure的大部分都是用Java编写的。

如果你把这个问题说成是最好的Lisp来开始一个新的项目,那么Clojure可能是最好的select。