Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure Lisp-1和Lisp-2之间的区别是什么?_Clojure_Lisp_Lisp 2 - Fatal编程技术网

Clojure Lisp-1和Lisp-2之间的区别是什么?

Clojure Lisp-1和Lisp-2之间的区别是什么?,clojure,lisp,lisp-2,Clojure,Lisp,Lisp 2,我试图理解Lisp-1和Lisp-2之间的区别,以及这与Clojure的关系,但我仍然无法正确理解。有谁能启发我吗?根据: 在Lisp社区中,单独的函数名称空间是否是一个优势是一个争论的来源。这通常被称为Lisp-1与Lisp-2之争。Lisp-1指的是Scheme的模型,Lisp-2指的是Common Lisp的模型 这基本上是关于变量和函数是否可以有相同的名称而不发生冲突。这意味着它不允许函数和变量同时使用相同的名称。您可能想阅读Richard Gabriel的这篇文章。这是Lisp社区在L

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

根据:

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


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

您可能想阅读Richard Gabriel的这篇文章。这是Lisp社区在Lisp1与Lisp2中讨论的问题的摘要。在前几节中,它有点密集,移动缓慢,但当您通过第5节时,阅读起来就容易多了

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


两者之间存在着一些权衡和品味上的差异,但阅读报纸了解细节。克里斯蒂安·奎因内克的书《小片段口齿不清》还讨论了贯穿全文的差异。

如果函数和变量的名称相同,Lisp-2不是更容易混淆吗?部分原因是使用Lisp-2方言的程序员不会特意让函数和变量的名称相同<代码>列表经常被用作函数参数,而OMG是一个非常容易混淆的函数,因为
(列表…
)是一个标准函数。许多将
list
作为变量的函数不使用
list
函数,或者不在该变量附近使用它。即使发生这种情况也不算太糟糕:
(list foo list)
。这并不比一个像“好好战斗”这样的句子更让人困惑,在这个句子中,同一个词作为名词和动词出现。@Zubair Java甚至有更多的空格。你可以用相同的名称定义一个类、一个方法和一个变量。作为助记符,我认为Lisp 1s有一个名称空间,Lisp 2s有两个名称空间(一个用于函数,一个用于变量)。@NickMcCurdy作为助记符,我认为自行车有两个轮子,这辆三轮车有三个。加布里埃尔论文中比较神秘的部分之一是关于多重处理的第11部分。在这一节中,他暗示Lisp1更有利于函数式编程,因此更有利于多处理。显然,这是克罗朱尔感兴趣的。但我不确定为什么Lisp1对FP更有利。有人对此有所了解吗?可能是因为FP的主要目的是将函数视为第一类值,因此以与所有其他函数相同的方式处理它们更方便,概念更清晰values@PeterMcLain当Lisp-1方言的用户说Lisp-1更有利于函数式编程时,它们的意思是,您不必在代码中塞满
funcall
function
运算符。这些都消失在Lisp-1中。例如,当一个策划人试图编写Lisp时会发生什么:我很喜欢这篇论文使用的术语“清晰”,具有奇妙的讽刺意味“更容易理解”。