Clojure 的 reduce 函数如何反转列表而不是向量

How does Clojure's reduce function work to reverse a list but not a vector

我正在寻找在不使用 reverse 函数的情况下使用 Clojure 反转集合的方法,并偶然发现了这个解决方案。

(reduce conj '() [1 2 3 4 5]) => (5 4 3 2 1) 

我已经阅读了关于 reduce 如何工作的 Clojure api,但我仍然对它在这种情况下的工作方式感到困惑。

我还发现我是否要将向量作为第三个参数而不是列表传递,即:

(reduce conj [] [1 2 3 4 5]) => [1 2 3 4 5]

我好像找回了同一个向量。

我想知道是否有人可以简要解释一下 reduce 在这两种情况下的工作方式。

我还发现这个方法也反转了一个向量:

(into () [1 2 3 4]) => (4 3 2 1) ; ???

文档字符串说:conj[oin]。 Returns 带有 xs 'added' 的新系列。 (conj nil 项目) returns (项目)。根据具体类型,'addition' 可能发生在不同的 'places'。

对于向量来说,添加的自然位置是末尾。对于列表,添加的自然位置是前面(如 'cons')。