是否有一些功能可以将多个序列组合在一个函数上?

时间:2016-12-01 22:29:36

标签: 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-arity函数。 如果任何一个序列耗尽元素,它应该只是停止或重复较短的元素,并不重要。

1 个答案:

答案 0 :(得分:3)

您可以使用map功能(来自clojure.core)。

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

所以你的例子会变成:

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