【发布时间】:2016-01-31 22:38:11
【问题描述】:
这是一个关于如何正确收集 Clojure 中嵌套 for 循环的结果的问题。假设您要创建所有向量的序列[i j] 其中0<=j<i<4
以下代码
(for [i (range 1 4)]
(for [j (range i)]
[i j]
)
)
生产
(([1 0]) ([2 0] [2 1]) ([3 0] [3 1] [3 2]))
但我真正想要的是
([1 0] [2 0] [2 1] [3 0] [3 1] [3 2])
这样做的正确方法是什么?
请注意,我对这个特定序列不感兴趣。我在这里的目的是学习如何从嵌套的for 循环中收集结果,我需要它来解决更复杂的问题。
【问题讨论】:
-
仅供参考 Clojure 中的
for与 C 或 Java 中的for不同。将一个 for 嵌套在另一个 for 中是相当不寻常的。 Clojurefor是一个列表理解函数,它可以帮助您创建一个列表。请参阅exemples 的 Python 列表理解。 -
谢谢。我试过你建议的方法,它真的更干净。
标签: for-loop clojure lazy-sequences