将函数应用于未指定数量的向量的每个元素

问题描述 投票:0回答:1

假设我有两个向量:

(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))

但我认为这本质上是更多的代码在做完全相同的事情。

我该如何让这个函数接受任意数量的向量?

dictionary clojure
1个回答
1
投票

我会尝试这样的事情:

(defn mapply [& vecs]
  (apply map + vecs))

(mapply [1 2 3] [10 40 60] [1000 10000 1000000])
;; => (1011 10042 1000063)

请参阅 文档了解

apply
。我们使用
(apply f x args)
形式,其中
f
map
x
+

© www.soinside.com 2019 - 2024. All rights reserved.