clojure - 是否有一些函数可以在一个函数上组合多个序列?

标签 clojure functional-programming sequence

如果我有两个序列

(let [v1 '(1 2 3 4)
      v2 '(2 4 6 8)]
  ...)

是否有某种方法可以通过函数将它们组合成单个向量,例如:

(combine #(* % %2) [1 2 3 4] [2 4 6 8]) => [2 8 18 32]

“映射”函数将为每个“组合”序列采用一个参数,因此使用 3 个序列调用它需要一个 3 元函数。 如果任一序列用完元素,它应该停止或重复较短的序列,这并不重要。

最佳答案

您可以使用 map 函数(来自 clojure.core)。

map 将函数作为其第一个参数,并将任意数量的序列作为其后续参数。它通过从每个输入序列中获取一个元素并应用该函数并将该元素集合作为参数来构造输出的每个元素,正如您所需要的那样。

所以你的例子将变成:

(map * [1 2 3 4] [2 4 6 8])

关于clojure - 是否有一些函数可以在一个函数上组合多个序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40921573/

相关文章:

c - 递归计算序列

multithreading - 如何利用 Clojure 中的所有 CPU 内核

eclipse-plugin - 如何在 RCP 应用程序中嵌入 Clojure

swift - 可选类型上的 flatMap 提示在闭包内展开

haskell - Haskell 中回溯的实现

c++ - 增长序列的长度 C++

python - 从列表中提取所有 n 元素序列

xml - 如何使用 clojure.data.xml 延迟解析输入流中的记录?

clojure - 在 Clojure 中定义 SPI

tree - 尾递归函数在 Ocaml 中查找树的深度