for+[]的用法怎么理解


#1

函数定义如下:

(defn nemesis-product
"The cartesian product of collections of symbols to nemesis functions c1 and
c2, restricted to remove:

- Duplicate orders (a,b) (b,a)
- Pairs of clock-skew nemeses
- Identical nemeses"        

[c1 c2]
(->> (for [n1 c1, n2 c2] [n1 n2])
(reduce (fn [[pairs seen] [n1 n2 :as pair]]
(if (or (= n1 n2)
(and (:clocks (eval n1)) (:clocks (eval n2)))
(seen #{n1 n2}))
[pairs seen]
[(conj pairs pair) (conj seen #{n1 n2})]))
[[] #{}])
first))

其中“ (for [n1 c1, n2 c2] [n1 n2])”干啥的呢?