Clojure - 来自嵌套列表的对

时间:2013-12-16 11:47:21

标签: list map clojure nested

我正在尝试遍历嵌套列表以在Clojure中收集更多惯用的对象

(def mylist '(
  (2, 4, 6)
  (8, 10, 12)))

(defn pairs [[a b c]]
  (list (list a c)(list b c)))

(mapcat pairs mylist)

;((2 6) (4 6) (8 12) (10 12))

这可以变得更优雅吗?

2 个答案:

答案 0 :(得分:3)

您的代码很好,但我会使用向量而不是列表

(defn pairs [[x1 x2 y]]
  [[x1 y] [x2 y]])

(mapcat pairs mylist)

答案 1 :(得分:2)

只是添加更多解决方案(不优雅或直观;不要使用;)):

(mapcat
  (juxt (juxt first last) (juxt second last))
  [[2 4 6] [8 10 12]])
;; => ([2 6] [4 6] [8 12] [10 12])

或者这个:

(mapcat
  #(for [x (butlast %) y [(last %)]] [x y])
  [[2 4 6] [8 10 12]])
;; => ([2 6] [4 6] [8 12] [10 12])