Contra Chuck,Common Lisp的一个优点是它具有一个坚持实施并为之奋斗的标准,因此您可以使用SBCL进行大量开发(具有出色的类型检查和推断功能),然后例如部署为与C库(带有ECL或其他),或作为.jar使用Java库(带有ABCL),或者与Mac或Windows本地GUI(两者均使用Clozure)。Common Lisp在各种体系结构,实现和时间上具有惊人的可移植性,Common Lispers在语言的支持下努力保持这种状态。例如,一个不规范的行为的愚蠢的分歧是问题“这是一个特殊的变量吗?” 所以我回答了我使用的所有实现:
#-abcl
(defun special-variable-p (symbol)
#+ecl(si:specialp symbol)
#+ccl(proclaimed-special-p symbol)
#+sbcl(equal '(:special t)
(multiple-value-list-int:info :variable :kind symbol)))
这样,在读取时,在ABCL(已经有)上,(defun special-variable-p (symbol) (si:specialp symbol))
在ECL上等等都减少了。因此,我可以将其放在我的.rc文件中,并在REPL中使用通用功能。但这不是很重要:这不是线程或各种支持的网络,也不是通信顺序流程库。#+sbcl/#-sbcl
即使在五个实现上运行,最后一个示例也只有一个。因为它依赖于已精心移植的代码。
但是,允许这种(和其他)优势的因素也给学习者带来了挑战:Common Lisp是一门非常大的语言。像我Clojure一样,这不是一两个星期就可以lur住的东西(但是随着即将推出的重大更改,我的Clojure已经开始腐烂了-这种语言虽然有其自身的优点,但却使我想起了对比)因此,您应该阅读本页面的很多内容,M-x hyperspec RET do-symbols RET
并不要通过按键来输入HyperSpec(对我而言,这很接近圣经。),然后考虑购买几本书。我有实用的Lisp实用程序,刚刚获得了Lambda的让步,现在将很快购买PAIP。
但是,即使Common Lisp是正确的答案,您也不会通过“仅选择”一些具有欺骗性的浮华替代方法(-“具有欺骗性”,因为Commonplace CL并没有向您展示其宏可以做的所有事情)完全浪费您的时间。拥有比任何人都更多的宏。通常的比较是在错误的CL和语法优化的替代X之间进行。您仍将学习基础知识,仍然可以使用在SICP,Lisp,The Little Schemer等中阅读的大部分内容。Lisp ,即使是错误的Lisp,仍然比非Lisp更好。(但是,您将花费一些时间在错误的Lisp中实现正确的Lisp的一部分,这很糟糕。)Meta-Greenspun。)