如果我有两个论点[[1 2] [3 4]]和[5 6],我怎样才能达到[[1 5] [2 6] [3 5] [4 6]]。
我想我可能不得不使用for
所以我试过了,
(for [x [[1 2] [3 4]]]
(for [xx x]
(for [y [5 6]] [xx y])))
但它返回了((([1 5] [1 6]) ([2 5] [2 6])) (([3 5] [3 6]) ([4 5] [4 6])))
非常感谢任何帮助。感谢
答案 0 :(得分:4)
(mapcat #(map vector % [5 6]) [[1 2] [3 4]])
或使用for
:
(for [c [[1 2] [3 4]]
p (map vector c [5 6])]
p)
答案 1 :(得分:2)
如果我理解你的问题,你的解决方案实际上非常接近。您不需要显式嵌套for
表达式,因为这样做会在每个级别创建一个新列表,而只需使用多个绑定:
(for [x [[1 2][3 4]]
xx x
y [5 6]]
[xx y])
这将导致
([1 5] [1 6] [2 5] [2 6] [3 5] [3 6] [4 5] [4 6])
现在我终于仔细阅读了你的问题,我想出了与@Lee (mapcat (fn[x] (map vector x [5 6])) [[1 2] [3 4]])
相同的答案,这是正确的答案,应该被接受。
答案 2 :(得分:0)
这是一种(嗯 - 不是特别优雅)获得答案的方式,而不使用for
:
(defn f [x y]
(let [x' (apply concat x)
multiples (/ (count x') (count y))
y' (apply concat (repeat multiples y))]
(mapv vector x' y')))
(f [[1 2] [3 4]] [5 6])
;;=> [[1 5] [2 6] [3 5] [4 6]]