2
我通过4clojure.com
问题(这是从问题33)的工作,我不能为我的生活弄清楚如何工作的:#(对于[x%,i(范围%2)] x)是怎么做的呢?
(#(for [x %, i (range %2)] x) [1 2 3] 2) ; --> '(1 1 2 2 3 3)
我可以看到for
结合x
到[1 2 3]
然后做东西两次(i
绑定到'(0 1)
),但我期待一个答案,如'([1 2 3] [1 2 3])
。它看起来像这个代码在某种程度上在输出上做了mapcat
。
for
的文档字符串包括以下内容:Collections are iterated in a nested fashion, rightmost fastest...
。这给了我直觉i
对x
的价值0, 1, 2
,但我不能说我明白发生了什么。
有人可以解释发生了什么,以改善我的心智模型for
如何工作?非常感谢!
“x”中的每个元素与“i”中的元素一样多次使用。例如:'(for [x [1 2 3] i [0 0]] x)'会给你同样的结果'(1 1 2 2 3 3)' – tolitius
tolitius和Jared314,谢谢你的答案。 Jared314,我的想法是有关'x'绑定的错误。你的回答 - 写得非常好 - 帮助我理解了另一种“for”的用法,这也让我感到困惑。再次感谢! –