如何将地图输出放入单个集合中

时间:2012-01-30 20:34:53

标签: map clojure

鉴于以下内容:

user> (map (fn [x] (map #(* x %) '(1 2))) '(2 3))  
((2 4) (3 6))

在clojure中,如何以惯用方式进行更改,以便输出变为:

(2 4 3 6)

我使用列表进行说明,但任何收集都没问题。

2 个答案:

答案 0 :(得分:5)

(mapcat (fn [x] (map #(* x %) '(1 2))) '(2 3))

这是简写:

(apply concat (map (fn [x] (map #(* x %) '(1 2))) '(2 3)))

concat将集合连接成一个序列。使用apply调用它可以传递要连接的集合集合。

答案 1 :(得分:3)

我可能会像Justin那样使用mapcat,但在许多类似情况下,for是构建集合的绝佳工具。例如,我认为这是编写函数的一种非常清晰的方法:

repl-1=> (for [x      '(2 3)
repl-1=*       factor '(1 2)]
repl-1=*   (* x factor))
(2 4 3 6)