我想用ACT-R
做一些模拟,我需要一个Common Lisp
实现。我有三个可用的Common Lisp
实现:(1) CLISP
[1]、(2) ECL
[1]和(3) SBCL
[1]。正如你可能从这些链接中收集到的那样,我在维基百科上读到了关于这三个链接的一些信息。但我想听听一些有经验的用户的意见。更具体地说,我想知道:
(i)
这三种实现之间的主要区别是什么(例如:它们最擅长什么?它们中是否有任何一种仅用于特定目的,因此可能不适合特定任务?(?
(ii)
是否有一个明显的选择,要么是基于我将使用ACT-R
,要么是出于一般原因?
因为这可能被解释为一个主观问题我检查了我可以在这里问什么主题,以及我应该避免问什么类型的问题?如果我读对了,它就不应该被视为禁果。
我编写了一个中等大小的应用程序,并在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。(
通常,SBCL
是开源Lisp中的默认选择。它坚固、支持良好、生成快速代码,并提供了许多超出标准要求的优点(并发原语、概要分析等(。另一个具有类似属性的实现是CCL
。
如果你不是工程师,或者你想快速向非工程师展示Lisp,CLISP
更合适。这是一个非常基本的实现,但运行起来很快,而且用户友好。Lisp计算器:(
ECL
的主要卖点是它是可嵌入的,也就是说,它很容易在一些C应用程序中工作,比如web服务器等。对于那些想探索Lisp和外部世界边界上的解决方案的极客来说,这是一个很好的选择。如果您对这种用例不感兴趣,我不建议您尝试它,尤其是因为目前它还没有得到积极支持。
它们的名称、bug和非标准添加(使用它们会将您锁定在中(
我在开发过程中使用CLISP作为REPL和测试,通常用于生产的SBCL。ECL我从来没有用过。
我建议您使用多个实现来测试代码。