Clojure地图有两个参数

时间:2015-11-15 22:48:42

标签: clojure functional-programming

我正在尝试将一个带有两个参数的函数映射到一个向量。

例如,给定一个向量[2, 3, 4],我希望通过" +"将每个数字加2。功能

以下是我的尝试:

(map (defn add2[i] (+ 2 i)) [2, 3, 4])
(map (+ 2) [2, 3, 4])

3 个答案:

答案 0 :(得分:1)

匿名函数使用fn#()声明:

(map (fn [i] (+ 2 i)) [2 3 4])
(map #(+ 2 %) [2 3 4])

您也可以使用partial

(map (partial + 2) [2 3 4])

逗号是可选的,通常不在源代码中使用。

答案 1 :(得分:1)

您想使用匿名函数fn

$ (map (fn [x] (+ 2 x)) [2 3 4])
=> [4 5 6]

#(do %1 %2)fn

的读者糖
$ (map #(+ %) [2 3 4]);the first argument can be either % or %1
=> [4 5 6]

或者你也可以使用partial来返回一个函数,该函数将你给它的函数部分地应用于其中一个参数。你应该更喜欢这个用于部分应用常数值。

$ (map (partial + 2) [2 3 4]);the first argument can be either % or %1
=> [4 5 6]

答案 2 :(得分:0)

(map (fn [i] (+ 2 i)) [1 2 3])

或者使用以下匿名函数:#(+ 2 %)

您还可以执行:(partial + 2)来定义部分功能

你的第二个代码示例不起作用,因为你需要告诉clojure将map应用函数的参数放在哪里。这样做的方法是定义一个函数(正如你在第一个例子中所做的那样)或创建一个匿名函数,就像我上面所做的那样。