gpt4 book ai didi

clojure - 有人可以解释 "conj"的行为吗?

转载 作者:行者123 更新时间:2023-12-04 18:12:11 27 4
gpt4 key购买 nike

(conj (drop-last "abcde") (last "abcde"))

返回 (\e \a \b \c \d)
我很困惑。在 conj的文档中,我注意到

The 'addition' may happen at different 'places' depending on the concrete type.



这是否意味着对于 LazySeq,添加新项的位置是head?
如何获得 (\a \b \c \d \e)作为结果?

最佳答案

'The 'addition' may happen at different 'places' depending on the concrete type.'



这是指Clojure持久性集合的行为,这些持久性集合在性能和基础实现方面以最有效的方式合并了添加项。

向量总是添加到集合的末尾:
user=> (conj [1 2 3] 4)
[1 2 3 4]

正如您所注意到的,使用列表,conj将该项目放在列表的前面:
user=> (conj '(1 2 3) 4)
(4 1 2 3)

因此,是的,就其具体实现而言,LazySeq被视为List。

How can I get (\a \b \c \d \e) as the result?



有很多方法,但是您可以轻松地从LazySeq创建向量:
(conj (vec (drop-last "abcde"))
(last "abcde"))

关于clojure - 有人可以解释 "conj"的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11490862/

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