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

时间:2015-03-17 22:53:23

标签: clojure

我最终要做的是将两个向量相乘并返回相同大小的向量,例如:

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

但我无法弄清楚如何将嵌套列表值相乘?

1 个答案:

答案 0 :(得分:3)

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]

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