假设我有两个向量:
(def x [1 2 3])
(def y [4 5 6])
并且我想按顺序对这些向量中的每个元素应用一个函数(例如,
+
),如下所示:
(defn mapply
[x y]
(map + x y))
这个函数运行得很好,产生了
(5 7 9)
。现在,我想要更通用,并将该函数应用于可能任意数量的向量。我最初的想法是我需要 &
参数。
(defn mapply
[& vecs]
(map + vecs))
显然,这不起作用并抛出错误:
无法将 clojure.lang.PersistentVector 转换为 java.lang.Number
大概,我需要将
vecs
解压成单独的向量,但我不知道会有多少个向量,所以我不确定如何适当地解构 vecs
。我的思绪转向 apply
,然后将 vecs
分解成单独的向量,也许是这样的:
(defn mapply
[& vecs]
(apply (fn [& stuff] (map + stuff)) vecs))
但我认为这本质上是更多的代码在做完全相同的事情。
我该如何让这个函数接受任意数量的向量?