Clojure的减少函数如何工作以反转列表而不是向量

时间:2015-03-01 22:06:54

标签: clojure

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

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

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

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

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

我好像回到了同一个载体。

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

此外,我发现此方法也会反转矢量:

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

1 个答案:

答案 0 :(得分:5)

doc字符串说:conj [oin]。返回添加了xs'的新集合。 (conj nil item)返回(item)。添加'可能发生在不同的地方'取决于具体类型。

对于矢量,添加的自然位置是结束。对于列表,添加的自然位置是前面(与' cons'一样)。

相关问题