在clojure中,如何在2元素向量的集合上创建应用2个不同函数的列表?

时间:2012-02-22 08:48:00

标签: clojure

在Clojure中,我有一个2元素向量的集合coll。我想创建通过分别在集合的每个向量的第一个和第二个元素上应用fg而获得的集合。我认为这与list comprehension构造有关。

(def coll [[1 1000] [2 2000] [3 3000]])

是否存在创建以下结果的惯用方法?

 [[f(1) g(1000)] [f(2) g(2000)] [f(3) g(3000)]]

3 个答案:

答案 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]])