在Clojure中,我有一个2元素向量的集合coll
。我想创建通过分别在集合的每个向量的第一个和第二个元素上应用f
和g
而获得的集合。我认为这与list comprehension构造有关。
(def coll [[1 1000] [2 2000] [3 3000]])
是否存在创建以下结果的惯用方法?
[[f(1) g(1000)] [f(2) g(2000)] [f(3) g(3000)]]
答案 0 :(得分:5)
再次,列表理解FTW:
(vec (for [[x y] [[1 1000] [2 2000] [3 3000]]] [(f x) (g y)]))
答案 1 :(得分:4)
是,
(vec (map (fn [[p1 p2]] [(f p1) (g p2)])
[[1 1000] [2 2000] [3 3000]]))
答案 2 :(得分:1)
要从头开始写这个,我会做skuro所做的 - 它简单,容易和可读。但是我也写了一个更高阶的函数来抽象这个,名为knit。所以现在我把它写成
(map (knit f g) [[1 1000] [2 2000] [3 3000]])