在 Clojure 中将嵌套的列表值对相乘

Multiply nested pairs of list values in Clojure

我最终要做的是将两个向量相乘,然后 return 一个相同大小的向量,例如:

[6 7 8 9 10] * [0 1 3 1 0] => [0 7 24 9 0]

我正在尝试做类似的事情:

(partition 2 (interleave [6 7 8 9 10] [0 1 3 1 0])) => ((6 0) (7 1) (8 3) (9 1) (10 0))

... 然后将每个嵌套列表值相乘并使用 flatten 得到:

(0 7 24 9 0)

但我不知道如何乘以嵌套列表值?

Map 采用多个序列和一个函数将每个成员与其他序列的相应成员组合起来。

user> (map * [6 7 8 9 10] [0 1 3 1 0])
(0 7 24 9 0)
user> (mapv * [6 7 8 9 10] [0 1 3 1 0])
[0 7 24 9 0]

在这种情况下,它对每个列表中的第一个数字调用 *,然后对每个列表中的第二个数字调用 *,依此类推,构建输出的序列。如果您更喜欢向量中的输出 mapv 很方便。