Scheme或Common Lisp?

时间:2010-08-19 21:42:55

标签: programming-languages lisp scheme common-lisp

我是一名中级程序员,并决定学习常见的lisp或方案。我的问题很简单,你会选择哪一个?我不太关心语法的难度,只关心语言本身的力量,灵活性和其他方面。另外,我应该选择哪种常见的lisp或方案实现?谢谢!

11 个答案:

答案 0 :(得分:18)

像很多东西一样,取决于你想做什么

请记住,如果您现在选择一个,则不会阻止您稍后更改。事实上,我发现从了解一个小方案转向学习很多Clojure很容易。

如果您只是想学习,玩弄Lisp,甚至构建中等复杂的程序,我会说Scheme可能是更好的选择。它有一个更干净,更清晰(更小)的标准库,并且有很多资源可以满足学习者的需求(不是没有CL)。

如果你想要大量库的原始功能(许多写得非常好)和标准的工具包(作为CL实现的标准获得)CL附带的库,那么它是你更好的选择。

或者,我建议Clojure。这是一种相对较新的语言(<5年),但它有很多内容。它是为并发而构建的,如果你需要有状态,它有很多原语可以让 easy 编写状态安全的程序。还有很多其他特权,但标准库manages to stay small

它也在JVM上,因此如果您使用Java,您可以访问所有库,如果您需要任何库,那么JVM提供的原始速度就在您的指尖。

然而,它是一种新语言,拥有一个新的(但非常友好!)社区。如果你只是想把你的脚趾浸在Lisp池中,我会说Scheme是你最好的选择。如果你想完成任务,我的偏好和我的爱就是Clojure。

编辑老实说,这三个中的任何一个都不会出错。一个人可能会更好,取决于你想做什么,我建议Clojure几乎任何人。

答案 1 :(得分:10)

如果您想编写实用代码,和/或您希望从一个实现到另一个实现具有良好的可移植性,请使用Common Lisp。目前有11种实施正在进行主动维护。 See my survey of implementations.

不同的实现具有不同的优势。如果你想要一个免费的,开源的,Clozure Common Lisp(CCL)(不要与“Clojure”混淆!)和Steel Bank Common Lisp(SBCL)是很好的通用实现。还有商业实现,最着名的是Allegro Common Lisp和LispWorks。为了Windows友好,Corman Common Lisp拥有实用的设施。对于嵌入,Embedded Common Lisp(ECL)非常棒(您不必以嵌入方式使用它)。如果你想要一个编译成Java虚拟机的Common Lisp,那就是Armed Bear Common Lisp(ABCL)。见其他人的论文;你想要哪一个取决于你的个人情况。

答案 2 :(得分:7)

如果你想要力量和灵活性,你可以使用Common Lisp。

如果你想干净简单,你可以使用Scheme。

到目前为止,我对SBCL很满意。

答案 3 :(得分:6)

这是一个旧的;)Emacs还是vi? KDE还是Gnome?红色还是白色?

两者之间最大的区别是Scheme倾向于专注于函数式编程;一些作者强调Common Lisp中的函数式编程,例如Paul Graham,如果我编写Common Lisp,我会遵循他们的建议。

我倾向于喜欢Scheme,因为它对我来说更有意义。我发现Scheme社区,特别是围绕自由软件实现,更侧重于自由软件。考虑一下,如果它对你很重要。与流行的看法相反,Common Lisp是一种非常流行语言,但它最接近封闭的企业门。这是我摆脱Common Lisp的一个重要因素:当社区不那么开放时,你不会在帮助和图书馆方面找到那么多。

就实现而言,如果你是GNU / Linux用户,我会推荐Guile。其他实现远远超出了GNU意识的主流;我喜欢GNU社区,因此Guile是我的最佳选择。此外,Guile拥有我发现的默认安装中包含的最佳库集(考虑到与其他对Clojure一无所知的其他受访者不同)。

我看到其他一些受访者重复旧的咒语“如果你想完成某些事情,请使用Common Lisp;如果你想学习,请使用Scheme。”在 SICP 的时代,这可能是正确的,但我认为这些日子并不正确。像Guile一样,Scheme的一个很好的实现有大量的库可用,并且有很多很好的用例,表明你可以用它完成大量的工作。

答案 4 :(得分:3)

我的印象:Common Lisp更多的是用于完成工作,Scheme更多的是用于教育和娱乐。我更喜欢SBCL实现。方案,我不知道。

答案 5 :(得分:1)

我对更实用,巴洛克和疣的编程语言更有兴趣,所以我选择了Common Lisp。

我使用的是GNU clisp,但由于注重效率,我正在考虑更改为SBCL。

答案 6 :(得分:1)

我选择了Scheme,因为它是Structure and Interpretation of Computer Programs中讲授的语言。到目前为止,这是一个有趣的阅读。

答案 7 :(得分:1)

我通常会这样看:Common Lisp是Scheme,因为C ++是Python。使用Common Lisp和C ++,您将获得大量工具和大量功能,并且基本上可以免费漫游。另一方面,使用Scheme,更多的是关注简单性,而且你可以稍微减少绳索。

就像C ++与Python一样,有一个想法是一个用于真正的成人项目,而另一个是玩具语言来玩或创建一次性脚本,即使在大多数情况下是“玩具”无论你需要做什么都足够好。

如果您想查看Scheme,我建议PLT Racket。它不是严格的标准方案,但它基本上是相同的,它是“包含电池”的分发。

答案 8 :(得分:0)

普通的lisp更有用,但方案更清洁。主要归结为那个。

答案 9 :(得分:0)

Scheme与Common Lisp具有相同或更大的功能,但它没有那么多的支持或绑定。我会选择Common Lisp。至于实施?我一直在slime / swank中使用sbcl已经有一段时间了,它非常好用而且快速。史莱姆非常好。

答案 10 :(得分:0)

  

我不太关心语法的难度,只关心语言本身的力量,灵活性和其他方面。

语法在任何lisp中同样困难或不同。对于非lispers来说,Clojure的语法更容易一些,因为使用了不同的括号。这比人们期望的更多。

Clojure和CL都有优秀的入门书籍。我没有深入阅读计划书籍,但相比之下它们似乎更具学术风味。

我会根据个人经验向新手推荐Clojure或Common Lisp。

Clojure功能更强大,非常实用。如果使用CL,我建议使用IDE(Allegro和其他人有免费版本),或者使用文本编辑器和repl。换句话说,不要使用粘液。对于Clojure,我想不出任何IDE,但也许Textmate或Eclipse会有什么东西?

Scheme也有一些非常好的IDE,比如DrScheme。但是我发现在做一些真正的项目时更容易保持参与,而Clojure和CL似乎都使这更容易。