我正在研究如何在不使用该reverse功能的情况下使用Clojure来反转集合,并偶然发现了这个解决方案.
(reduce conj '() [1 2 3 4 5]) => (5 4 3 2 1)
Run Code Online (Sandbox Code Playgroud)
我已经阅读了关于如何减少工作的Clojure api,但我仍然对它在这种情况下如何工作感到困惑.
另外我发现如果我传递一个向量作为第三个参数而不是列表,即:
(reduce conj [] [1 2 3 4 5]) => [1 2 3 4 5]
Run Code Online (Sandbox Code Playgroud)
我好像回到了同一个向量.
我想知道是否有人可以给我一个简短的解释,说明reduce两种情况下的工作方式.
另外我发现这个方法也反转了一个向量:
(into () [1 2 3 4]) => (4 3 2 1) ; ???
Run Code Online (Sandbox Code Playgroud)
doc字符串说:conj [oin].返回xs'已添加'的新集合.(conj nil item)返回(item)."添加"可能发生在不同的"地方",具体取决于具体类型.
对于矢量,添加的自然位置是结束.对于列表,添加的自然位置是前面(与'cons'一样).