我试图理解Lisp-1和Lisp-2之间的区别以及它与Clojure的关系,但我仍然不理解。谁能开导我?
答案 0 :(得分:65)
您可能希望Richard Gabriel阅读此paper。它是Lisp社区在Lisp1和Lisp2中讨论的问题的摘要。它在前几节中有点密集且缓慢移动,但是当你超过第5节时更容易阅读。
基本上,Lisp1有一个将符号映射到值的环境,这些值可以是“常规”或函数。 Lisp2具有(至少)两个名称空间(符号具有用于其函数值的槽和用于常规值的槽)。因此,在Lisp2中,您可以拥有一个名为foo的函数和一个名为foo的值,而在Lisp1中,名称foo只能引用一个值(函数或其他)。
两者之间存在一些权衡和品味差异,但请阅读论文了解详情。 Christian Queinnec的书“Lisp in Small Pieces”也讨论了文本中的差异。
答案 1 :(得分:55)
根据wikipedia:
函数的单独命名空间是否有优势是Lisp社区中的争用来源。它通常被称为Lisp-1 vs. Lisp-2辩论。 Lisp-1引用Scheme的模型,Lisp-2引用Common Lisp的模型。
基本上关于变量和函数是否可以具有相同的名称而不会发生冲突。 Clojure is a Lisp-1意味着它不允许同时为函数和变量使用相同的名称。