Adi*_*vin 2 for-loop clojure lazy-sequences
这是一个关于如何从for
Clojure中的嵌套循环中正确收集结果的问题.假设你想创建所有向量序列[i j]
,其中0<=j<i<4
以下代码
(for [i (range 1 4)]
(for [j (range i)]
[i j]
)
)
Run Code Online (Sandbox Code Playgroud)
产生
(([1 0]) ([2 0] [2 1]) ([3 0] [3 1] [3 2]))
Run Code Online (Sandbox Code Playgroud)
但我真正想要的是
([1 0] [2 0] [2 1] [3 0] [3 1] [3 2])
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么?
请注意,我对这个特定的序列不感兴趣.我的目的是学习如何从嵌套for
循环中收集结果,这是我需要解决更复杂的问题.
不要嵌套两个循环,而是使用一个循环和两个迭代器:
(for [i (range 1 4)
j (range i)]
[i j])
Run Code Online (Sandbox Code Playgroud)