我正在尝试将一个带有两个参数的函数映射到一个向量。
例如,给定一个向量[2, 3, 4]
,我希望通过" +"将每个数字加2。功能
以下是我的尝试:
(map (defn add2[i] (+ 2 i)) [2, 3, 4])
(map (+ 2) [2, 3, 4])
答案 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应用函数的参数放在哪里。这样做的方法是定义一个函数(正如你在第一个例子中所做的那样)或创建一个匿名函数,就像我上面所做的那样。