105

我试图理解 Lisp-1 和 Lisp-2 之间的区别以及这与 Clojure 的关系,但我仍然无法正确理解。任何人都可以启发我吗?

4

2 回答 2

81

您可能想阅读 Richard Gabriel 的这篇论文。它是 Lisp 社区在 Lisp1 与 Lisp2 中讨论的问题的总结。在前几节中它有点密集和缓慢,但是当你通过第 5 节时更容易阅读。

基本上,Lisp1 有一个将符号映射到值的单一环境,这些值可以是“常规”或函数。Lisp2 有(至少)两个命名空间(符号有一个用于函数值的槽和一个用于常规值的槽)。因此,在 Lisp2 中,您可以拥有一个名为 foo 的函数和一个名为 foo 的值,而在 Lisp1 中,名称 foo 只能引用单个值(函数或其他)。

两者之间有一些权衡和口味差异,但请阅读论文了解详细信息。Christian Queinnec 的书“Lisp in Small Pieces”也讨论了贯穿文本的差异。

于 2011-01-02T17:43:10.043 回答
72

根据维基百科

单独的函数命名空间是否是一个优势是 Lisp 社区争论的根源。它通常被称为 Lisp-1 与 Lisp-2 的辩论。Lisp-1 指的是 Scheme 的模型,Lisp-2 指的是 Common Lisp 的模型。

它基本上是关于变量和函数是否可以具有相同的名称而不会发生冲突。 Clojure 是一个 Lisp-1,这意味着它不允许函数和变量同时使用相同的名称。

于 2011-01-02T14:52:54.847 回答