我想用ACT-R
进行一些模拟,我需要Common Lisp
实现。我有三个Common Lisp
实施可用:(1) CLISP
[1],(2) ECL
[1]和(3) SBCL
[1]。正如您可能从链接中收集的那样,我已经在维基百科上阅读了所有这三个链接。但我想要一些有经验的用户的意见。更具体地说,我想知道:
(i)
三种实现之间的主要区别是什么(例如:它们最擅长的是什么?它们中的任何一种仅用于特定目的,因此可能不适用于特定任务吗?)?
(ii)
根据我将使用ACT-R
或基于一般原因的事实,是否有明显的选择?
因为这可以解释为一个主观问题 我检查了What topics can I ask about here和What types of questions should I avoid asking?,如果我读得正确,就不应该被视为禁果。
答案 0 :(得分:15)
我写了一个中等大小的应用程序并在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或SBCL,它来自CMUCL。 (我只是简单地尝试了CMUCL。它的解释器非常慢,但我认为编译的代码非常快。但我认为大多数人选择SBCL而不是CMUCL。)
(这个问题可能属于Programmers.SE。)
答案 1 :(得分:8)
通常,SBCL
是开源Lisps中的默认选择。它是可靠的,支持良好,生成快速代码,并提供超出标准要求(并发原语,分析等)的许多好处。具有类似属性的另一个实现是CCL
。
CLISP
会更合适。它是一个非常基本的实现,但很快就能运行并且用户友好。一个Lisp计算器:)
ECL
的主要卖点是它的可嵌入性,即它很容易让它在某些C应用程序中运行,比如网络服务器等。它是'对于想要探索Lisp和外部世界边界解决方案的极客来说,这是一个不错的选择。如果您不喜欢这种用例,我建议您不要尝试,特别是因为目前没有得到积极支持。
答案 2 :(得分:5)
他们的名字,他们的错误和他们的非标准添加(使用它们会锁定你)
我使用CLISP作为REPL并在开发期间进行测试,通常使用SBCL进行生产。 ECL我从未使用过。
我建议您使用多个实现测试代码。