用重复的参数clojure映射

时间:2014-04-04 15:31:27

标签: clojure

以下面的函数为例:

(defn f [x y] (+ x y))

我想使用此函数为向量的每个元素添加2:

[1 2 6 3 6]

我可以使用map:

(map f [1 2 6 3 6] [2 2 2 2 2])

但是创建第二个向量似乎有点难看,其中每个元素都完全相同。

所以我认为使用闭包是一种更好的方法:

(map (fn g [x] (f x 2)) [1 2 6 3 6])

所以我的问题是:

在clojure中,当某些参数没有改变时,使用map的最佳方法是什么?

2 个答案:

答案 0 :(得分:4)

只需应用partial功能

(map (partial + 2) [1 2 6 3 6]) => (3 4 8 5 8)

答案 1 :(得分:2)

方法1 :使用repeat

(repeat 2)为您提供了一个无限2 s

的懒惰序列

在你的情况下,

(map f [1 2 6 3 6] [2 2 2 2 2])

应转换为

(map f [1 2 6 3 6] (repeat 2))

方法2 :使用匿名函数

(map #(f % 2) [1 2 6 3 6])