Doseq每y计算1 x。有没有什么方法可以让它在1年内评估1 x等等在Clojure中?

时间:2009-08-01 14:02:19

标签: clojure

我不确定如何说出这个帖子的名称,所以如果你能澄清它,请这样做。

我的示例代码是:

(doseq [x [1 2 3] y [3 2 1]] (println (str x y)))

该代码的输出是:


13
12
11
23
22
21
33
32
31
nil

我理解列表理解,而doseq都是这样评价的。有没有另一种方法可以做到这一点,所以不是x的1个元素用于y的每个元素,依此类推,x的1个元素与y的1个元素一起使用,依此类推,因此输出将是:


13
22
31

对不起,如果我没有说明这一点,我似乎无法用正确的方式说出来。

编辑:我认为您可以在Haskell中使用列表推导和语言扩展来完成此操作。 ParallelListComps等等。

3 个答案:

答案 0 :(得分:11)

你可以简单地做

(doseq [[x y] (map vector [1 2 3] [3 2 1])] 
  (println (str x y)))

答案 1 :(得分:4)

(partition 2
  (interleave [1 2 3] [3 2 1]))

interleave从给定序列中产生一系列交替元素,partition将此序列分组为n个元素的序列。

答案 2 :(得分:1)

这更简洁:

 (doall (map println [1 2 3] [3 2 1]))