24

我想做一些模拟,ACT-R我需要一个Common Lisp实现。我有三个Common Lisp可用的实现:(1) CLISP [1](2) ECL [1](3) SBCL [1]。正如您可能从链接中收集到的那样,我已经在 Wikipedia 上阅读了有关这三个链接的一些信息。但我想听听一些有经验的用户的意见。更具体地说,我想知道:

(i)这三种实现之间的主要区别是什么(例如:它们最擅长什么?它们中的任何一个是否仅用于特定目的,因此可能不适合特定任务?)?

(ii)基于我将使用的事实ACT-R或基于一般原因,是否有明显的选择?


由于这可能被解释为一个主观问题,我检查了我可以在这里问哪些主题以及我应该避免问哪些类型的问题?如果我没看错的话,它不应该是禁果。

4

3 回答 3

19

我编写了一个中等大小的应用程序并在 SBCL、CCL、ECL、CLISP、ABCL 和 LispWorks 中运行它。 对于我的应用程序,SBCL 无疑是最快的,并且它有一个非常好的调试器。对一些警告有点严格——你最终可能会以一种更严格的方式编码,或者关闭一个或多个警告。

我同意 Sylwester 的观点:如果可能,请编写标准,然后您可以在任何实现中运行您的代码。您将通过测试找出最适合您的项目的方法。

由于 SBCL 编译得如此积极,有时调试器中的堆栈跟踪信息比我想要的要少。这可能可以通过参数控制,但我只是在其他实现之一中重新运行相同的代码。例如,我记得 ABCL 有一个信息丰富的堆栈跟踪。(它也很慢,但如果你想要真正的 Common Lisp 和 Java 互操作性,它是唯一的选择。)

Common Lisp 的优点之一是有很多高质量的实现,其中大部分是免费的。

对于非正式用途——例如学习 Common Lisp,CCL 或 CLISP 可能是比 SBCL 更好的选择。

我从未尝试过使用 ECL 编译为 C。对于某些应用程序,它可能会在速度上击败 SBCL。我不知道。

CLISP 和 LispWorks 不会处理任意长的参数列表(除非在过去几年中已修复,但我对此表示怀疑)。结果证明这是我的应用程序的问题,但对于大多数代码来说都不是问题。

ACT-R 不是出自卡耐基梅隆大学吗?它的作者使用什么?我的猜测是从 CMUCL 派生的 CMUCL 或 SBCL。(我只是简单地尝试了 CMUCL。它的解释器很慢,但我认为编译后的代码很快。但我认为大多数人选择 SBCL 而不是 CMUCL。)

(这个问题可能属于 Programmers.SE。)

于 2014-08-05T04:51:52.877 回答
7

一般来说,SBCL是开源 Lisp 中的默认选择。它可靠、支持良好、生成快速代码,并提供超出标准要求的许多好东西(并发原语、分析等)。具有类似属性的另一个实现是CCL.

CLISP如果您不是工程师,或者您想快速向非工程师展示 Lisp,则更合适。这是一个非常基本的实现,但可以快速运行且用户友好。一个 Lisp 计算器 :)

ECL的主要卖点是它是可嵌入的,即它很容易在一些 C 应用程序中工作,如网络服务器等。对于想要探索 Lisp 边界的解决方案的极客来说,这是一个不错的选择。外面的世界。如果您对这种用例不感兴趣,我不建议您尝试它,特别是因为目前它没有得到积极支持。

于 2014-08-02T09:56:28.370 回答
6

他们的名字,他们的错误和他们的非标准添加(使用它们会锁定你)

我在开发期间使用 CLISP 作为 REPL 和测试,通常在生产中使用 SBCL。ECL 我没用过。

我建议您使用多个实现来测试您的代码。

于 2014-08-02T13:54:40.480 回答