gpt4 book ai didi

clojure - 与 Clojure 的序列不一致?

转载 作者:行者123 更新时间:2023-12-04 02:46:37 25 4
gpt4 key购买 nike

Clojure:

1:13 user=> (first (conj '(1 2 3) 4))
4
1:14 user=> (first (conj [1 2 3] 4))
1
; . . .
1:17 user=> (first (conj (seq [1 2 3]) 4))
4

我了解发生了什么,但这应该以不同的方式工作吗?

最佳答案

conj 的文档(来自 clojure.org ):

conj[oin]. Returns a new collection with the xs 'added'. (conj nil item) returns (item). The 'addition' may happen at different 'places' depending on the concrete type.



将元素“添加”到向量的末尾更有效,而在列表的开头这样做更有效。 conj使用对您提供的数据结构最有效的任何东西。

在您给出的示例中, '(1 2 3)(seq [1 2 3])都实现 ISeq (见 documentation for seq? ),而 [1 2 3]没有。

Clojure 的 conj最终调用 cons底层数据结构上的方法(不要与 cons 函数混淆 - 此方法是内部 clojure 代码);对于向量( PersistentVector), cons将元素添加到末尾,而对于列表,它们被添加到前面( cons s 的 PersistentList 方法返回一个新列表,其中新元素作为其头部,现有列表作为其尾部)。

关于clojure - 与 Clojure 的序列不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7437833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com