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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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 vs.Lisp:为什么不在Clojure中使用混凝土点对?_Clojure_Common Lisp - Fatal编程技术网

Clojure vs.Lisp:为什么不在Clojure中使用混凝土点对?

Clojure vs.Lisp:为什么不在Clojure中使用混凝土点对?,clojure,common-lisp,Clojure,Common Lisp,在讨论中,一张海报(mikera)说 Clojure没有点对 这其中的一个哲学原因是Clojure避免使用 具体的“配对”数据结构,而不是强调抽象 “序列”可以有可能的具体实现 有人能详细说明或给我指一些关于这意味着什么的文献吗?这是一种更优雅的方法还是数学上更纯粹的方法?这里有一个链接,指向Rich回答的有关其设计决策的问题列表 虽然此列表没有明确解释为什么没有具体的“配对”数据结构,但它可能会让您了解Rich对实用、通用设计的偏好 我记得曾经有一次讨论过引入一个“元组”,它就像一个只有两个元

在讨论中,一张海报(mikera)说

Clojure没有点对

这其中的一个哲学原因是Clojure避免使用 具体的“配对”数据结构,而不是强调抽象 “序列”可以有可能的具体实现


有人能详细说明或给我指一些关于这意味着什么的文献吗?这是一种更优雅的方法还是数学上更纯粹的方法?

这里有一个链接,指向Rich回答的有关其设计决策的问题列表

虽然此列表没有明确解释为什么没有具体的“配对”数据结构,但它可能会让您了解Rich对实用、通用设计的偏好

我记得曾经有一次讨论过引入一个“元组”,它就像一个只有两个元素的向量,以避免在使用两个元素的向量时出现不必要的内存分配

引入这些东西会带来复杂性成本,因此您可以假设成本/收益分析不保证将其添加到代码库中

查看Clojure关于添加元组的Jira项目的讨论,您将看到任何想法是如何实现的:


一切都很好。。更抽象的方法(因为clojure源于jvm,这很像java中的集合框架和迭代器的功能:实现上的抽象,但更进一步),这允许您在任何数据结构上使用相同的函数集,无论是列表、哈希映射,例如字符串或队列。例如,它可以从common lisp中的
nth
gethash
elt
E.t.c函数集中为您保存数据,并将其替换为简单的
get
,还可以让您引入新的数据结构(例如优化的)来实现所需的协议,Lyclojure建立在一个数据模型上,其中所有集合都可能是空的,或者可以使用更多项进行扩展。可以向列表/集合/映射/向量添加元素。不能向一对中添加元素。Clojure只是不把列表公开为cons cell。当我在大学里第一次看到Lisp时,我一直讨厌cons cell的想法(很久以前…)。使用诸如Vector、HashMap等抽象数据类型要好得多,这样您就可以忽略不关心的细节(故意使用JavaEY接口,比如这里的名称)。