CL和Scheme之间的碎片减缓了(至少对我而言!)。
所以,请给我“真正的答案”!
我试图阅读特征比较,他们似乎陷入了esoterica(我不完全理解),比如方言是否完全是尾递归等等。我希望你们(统称)能够明确区分不透明的差异。
良好的库支持,良好的环境和Unicode支持。
论战。功能在开始时很有用,但会干扰长期学习。
我一直在使用MzScheme,一旦得到readline支持,我就会很享受。我没有在Unix上运行GUI,所以对我来说它似乎是一个很好的环境选择。
我也非常高兴Clojure在debian上安装了一个易于安装的.deb软件包,因此它更易于使用。这是一个很大的胜利。尽管下面的一些相当容易激怒的敌意,低进入门槛是一个胜利。我喜欢被舀勺。
在阅读了更多SICP之后,我更了解尾递归的问题。
答案 0 :(得分:62)
Clojure是一种积极发展的现代Lisp方言。它基于JVM,因此所有Java库都可立即使用,因此也支持Unicode。
这是另一种选择,而非One True Answer。
答案 1 :(得分:31)
如果你想避免火焰战争,你喜欢图书馆,请使用Clojure。它很小,很快,社区很有帮助,也没有教条。这是Lisp减去20世纪80年代荒谬的事情。它有一个BDFL,如果你有一个好主意,它很有可能会被实现到语言中。
我玩弄了Common Lisp,这是一件很棒的事情。我在DrScheme完成了SICP的前三章和Metacircular Evaluator,这也很美妙。当然,通过学习这些,你将从中受益匪浅。
但是,随着时间的推移,我已经开始认真地掌握小语言了。我不会撒谎,我喜欢Javascript而且我喜欢C(并且如果每种语言都没有C核心那就是该死的),因为它们很小。
Clojure很小。很优雅。这是我们这个时代的语言。
答案 2 :(得分:19)
Clojure是LISP的一种很好的方言,可以促进函数式编程。它在JVM上运行,因此您可以访问可能习惯使用的任何Java库。该网站提供了很好的文档和screencasts来帮助您学习。另一个优点是,与许多其他方言不同,它的安装非常简单。
如果您只是想要了解概念Emacs(特别是EmacsLISP)是另一种选择。它附带了令人难以置信的文档,教程和大量代码示例。截屏也很容易找到。 Emacs的一大好处是编辑器是用LISP编写的,因此编辑器自然可以很好地支持LISP的运行,编辑和调试。此外,您可以扩展编辑器,使您的日常文本编辑需要更轻松,而您可以学习LISP。
答案 3 :(得分:18)
#-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中的common函数。但这不是很重要:这不是threading或variously-backed networking或a Communicating Sequential Processes library。最后一个示例只有一个#+sbcl/#-sbcl
,即使它在五个实现上运行。因为它依赖于经过精心移植的代码。
但是允许这种(和其他)优势的东西也给学习者带来了挑战:Common Lisp是一种非常大的语言。这不是你可以在一两个星期内啜饮的东西,就像我做过Clojure一样(但是我的Clojure已经随着突破性的变化而衰退了 - 这种语言尽管很重,但它有自己的优点,通过对比提醒我我喜欢Common Lisp的很多内容。)所以你应该阅读很多this page,并且让HyperSpec成为一个按键(对我来说,M-x hyperspec RET do-symbols RET
足够接近圣经。),想想买几本书。我有Practical Common Lisp,刚刚获得Let Over Lambda,并且很快就会购买PAIP。
但是即使Common Lisp是真正的答案,你也不会完全浪费你的时间来“挑选”一些看似浮华的替代方案( - '欺骗',因为普通的CL没有表现出来你所有的宏都可以做到,它比任何人都有kinds of macros。通常的比较是在坏的CL和语法优化的替代X之间。你仍然可以学习基础知识,你仍然可以在SICP,On Lisp,The Little Schemer等中使用大部分内容。一个lisp,即使是错误的lisp,仍然比非lisp更好。 (但是你会花一些时间来实现正确的口齿不清的部分,糟糕的是,在错误的口齿不清的情况下.Meta-Greenspun。)
答案 4 :(得分:18)
选择一个,然后学习它。当你弄清楚差异时,如果你第一次选择不好,你就可以再次选择。
答案 5 :(得分:9)
Lisp最大的问题是每个人都没有坚持不懈的标准。你不必只需要在Common Lisp和Scheme之间选择;你必须在Common Lisp的几个不兼容的实现和Scheme的几个不兼容的实现之间进行选择,以及其他一些像Arc和Clojure这样的小东西。
我建议从MzScheme开始。它很受欢迎,它是积极开发的,它有许多提供现代编程环境功能的库,而Scheme比Common Lisp更简单(更好,更简单)。
答案 6 :(得分:7)
了解elisp,以便扩展Emacs。
答案 7 :(得分:6)
和Clojure一起去吧。它是一种令人惊叹的语言,可以完全访问任何Java库。它已经开发了超过2年,已经有3个IDE插件正在开发中,并且在4月份出版了一本关于它的书。它非常快,非常优雅和美丽。你不能错过Clojure。
答案 8 :(得分:5)
对我而言,Scheme的基础理论更具说服力。到目前为止,PLTScheme是我发现的最活跃的LISP。不幸的是,它的打字数量激增,掩盖了Lisp的美丽。
我很想看到像arc这样的东西成功,但似乎不太可能。
答案 9 :(得分:4)
看看IronScheme。
答案 10 :(得分:4)
猜想:在学习第一个口齿不清时,不要学习最终用于最终开发的内容。
引理:学习Arc。它是lisp中所有“难以理解”的东西 - 闭包,宏,延续,没有Clojure的Java互操作复杂性,CL的命名空间混淆,或者Scheme的名称碎片。如果你很专注,你可以在周末学习所有这些东西。如果你在一个晚上很敏锐和专注。
它会让所有其他lisps更容易学习很多。
答案 11 :(得分:4)
我不知道Lisp但是为什么我认为PLT Scheme是一个不错的选择:
DrScheme
DrScheme是一个令人惊叹的编程环境,它带有编译器,步进器,语法检查器,REPL,无数语言支持并且是可扩展的。这使整个体验变得有趣。查看一些screenshots
社区的良好支持。
社区对他们的语言非常热情,也非常支持。如果您有任何问题,可以使用邮件列表,组和论坛。即便是作者也非常容易接近。
继续研究 PLT非常活跃,并继续使他们的工具更好,更好。您可以期待实验室的许多创新。例如。我很高兴使用它:http://blog.plt-scheme.org/2009/05/typed-scheme-20.html
免费图书和有趣的教程,帮助您入门。
http://www.htdp.org/
http://world.cs.brown.edu/
良好的模块和广泛的图书馆
http://www.cs.utah.edu/plt/develop/
http://planet.plt-scheme.org/
另见docs
如果您正在学习Scheme,请尝试DrScheme。
答案 12 :(得分:3)
你知道......当我对Lisp感兴趣时,我也认为我必须选择。然后,在阅读并询问了很多之后,我最终选择了Common Lisp。并不是因为它以绝对的方式比Scheme更“好”,而是因为它具有我知道的功能,我可能会在未来2 - 3年内在我的项目中使用:
所以,如果我是你,我会开始学习每种语言的一小部分,并找出每个语言的相对的优点和缺点(我的意思是那些与你的相关的那些)我需要/最想做的事情)所以你我可以选择一个。你可能会发现你以后也会学到另一个(发生在我身上 - 在学习Common Lisp一年后我必须学习更多Scheme)
至于Arc,Clojure和Lush,并不知道那些。我认为同样的论点也适用于他们......我不想过多地投资他们的原因是:Arc似乎对数值计算并不感兴趣,而P. Graham看起来似乎被代码大小所欺骗(至使他的代码不可读的观点); Clojure看起来不错,但我不喜欢JVM。 Lush ......好吧,除了使用动态范围之外,该语言的编译和解释版本非常不同 - 您无法编译递归函数。所以,它对我来说是Scheme或Common Lisp。
答案 13 :(得分:1)
选择Clojure以外的任何东西,随身携带它,以后你会处于更好的位置进行评估。
你提到这个问题,Lisp是学习Lisp的最佳媒介,对我来说,必须包含一个由低级原语构建的Lisp,而Clojure的大部分是用Java编写的。
如果您已经将这个问题说成是开始新项目的最佳Lisp,那么Clojure可能是最佳选择。
答案 14 :(得分:1)
我认为您要么使用Common Lisp,要么需要PLT Scheme。
前者带来了很多自由和力量(一开始可能会让你不堪重负),后者带有一堆库,配套教程和完善的IDE。
答案 15 :(得分:0)
很少有真正的选择,无论是SBCL,Clojure还是PLTScheme。
答案 16 :(得分:0)
我是Scheme的粉丝,但自从我对Scheme做了任何事情以来已经超过10年了。
像其他人说的那样 - 只需选择一个即可。