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')。
我正在寻找在不使用 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')。