鉴于以下内容:
user> (map (fn [x] (map #(* x %) '(1 2))) '(2 3))
((2 4) (3 6))
在clojure中,如何以惯用方式进行更改,以便输出变为:
(2 4 3 6)
我使用列表进行说明,但任何收集都没问题。
答案 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)