(conj (drop-last "abcde") (last "abcde"))
Run Code Online (Sandbox Code Playgroud)
回报 (\e \a \b \c \d)
我很困惑.在文档中conj,我注意到了
"添加"可能发生在不同的"地方",具体取决于具体类型.
这是否意味着,LazySeq添加新项目的地方是头?我怎样才能得到(\a \b \c \d \e)结果?
''添加'可能发生在不同的"地方",具体取决于 具体类型.
这指的是Clojure的持久集合的行为,它以最有效的方式在性能和底层实现方面加入了添加.
向量总是添加到集合的末尾:
user=> (conj [1 2 3] 4)
[1 2 3 4]
Run Code Online (Sandbox Code Playgroud)
使用Lists,conj将项目放在列表的前面,正如您所注意到的:
user=> (conj '(1 2 3) 4)
(4 1 2 3)
Run Code Online (Sandbox Code Playgroud)
所以,是的,就其具体实现而言,LazySeq被视为List.
我怎样才能得到
(\a \b \c \d \e)结果?
有很多方法,但您可以轻松地从LazySeq创建一个向量:
(conj (vec (drop-last "abcde"))
(last "abcde"))
Run Code Online (Sandbox Code Playgroud)