如何使用带有多个参数的函数的map

时间:2013-03-06 16:02:34

标签: clojure

我有以下方法:

(defn area [x y] (* x y))

如何根据参数编号迭代列表。像

这样的东西
(map area [2 5 6 6])

所以它会进行(area 2 5)(area 6 6)之类的计算,也许vector不是正确使用的类型。

3 个答案:

答案 0 :(得分:6)

您可以在此处使用partition,但您可能需要考虑以不同方式排列数据。例如,您可以使用向量向量:

[[2 5] [6 6]]

然后,您可以将area功能更改为:

(defn area [[x y]] (* x y))

现在您可以使用其中一对来调用它:(area [6 6])并轻松映射您的向量:

(map area [[2 5] [6 6]])

如果出于某种原因需要area取两个参数而不是矢量,你可以这样做:

(map #(apply area %) [[2 5] [6 6]])

对我而言,这比使用partition更简单。

答案 1 :(得分:4)

试试这个:

(map #(apply area %) (partition 2 [2 5 6 6]))

答案 2 :(得分:1)

map需要为函数所需的每个参数提供单独的序列参数:

(map [2 6] [5 6])