Scheme或Common Lisp?

use*_*778 17 lisp scheme programming-languages common-lisp

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

Isa*_*aac 18

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

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

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

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

或者,我建议Clojure.这是一种相对较新的语言(<5年),但它有很多内容.它是为并发而构建的,有很多原语可以让你在需要状态时轻松编写状态安全的程序.还有很多其他特权,但标准图书馆仍然保持小规模.

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

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

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


Dan*_*reb 10

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

不同的实现具有不同的优势.如果你想要一个免费的,开源的,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).见其他人的论文; 你想要哪一个取决于你的个人情况.


Dav*_*ley 7

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

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

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


Joe*_*son 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的一个很好的实现有大量的库可用,并且有很多很好的用例,表明你可以用它来完成大量的工作.