我是 clojure 的新手,最初我正在经历Clojure.org and 作弊簿 .
我想知道不同行为的确切原因是什么conj
在列表和矢量上。
(conj [1 2 3] 4)
[1 2 3 4]
(conj (list 3 2 1) 4)
(4 3 2 1)
当我将它与列表一起使用时,它会在第一个位置添加元素,而使用向量时,它会在最后一个位置添加元素。
The conj程序“根据具体类型在不同的‘位置’添加新元素”。尤其,conj
正在为给定的数据结构最有效的位置添加新元素。
在单链表中,插入新元素最便宜的位置是在头部——不需要遍历列表来查找插入点,只需将新元素与列表的第一个元素连接起来即可。
在向量中,最便宜的位置是在末尾 - 无需移动或移动其余元素来为新元素腾出空间,并且如果向量是使用实际大小大于其当前长度的额外可用空间创建的(瞬态向量和conj!
,但不适用于持久向量),在第一个空闲位置添加新元素并将其长度增加一个单位很简单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)