我试图了解LISP-1和LISP-2之间的区别,以及与Clojure的关系,但我仍然不正确地理解。谁能启发我?

有帮助吗?

解决方案

根据 维基百科:

功能的单独名称空间是一个优势,是LISP社区中的争论源。它通常称为LISP-1与LISP-2辩论。 LISP-1是指方案模型,LISP-2是指Common LISP的模型。

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

其他提示

您可能想读这篇文章 理查德·加布里埃尔(Richard Gabriel)。这是LISP社区在LISP1与LISP2中讨论的问题的摘要。在前几节中,它有点密集和缓慢的移动,但是在您越过第5节时阅读要容易得多。

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

两者之间有几种权衡和品味的差异,但请阅读本文以获取细节。克里斯蒂安·奎因内克(Christian Queinnec)的书《小块的lisp》也讨论了通过文本编织的差异。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top