2009-08-01 40 views
3

我真的不确定如何使用此线程的名称,因此如果您可以澄清它,请这样做。Doseq每y计算1 x。有没有什么办法让它在Clojure中评估1 x等等?

我的示例代码是这样的:

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

代码的输出是:


13 
12 
11 
23 
22 
21 
33 
32 
31 
nil 

据我所知,名单解析,并doseq评价都这样。有没有另外一种方法可以做到这一点,以便代替y的1个元素用于y的每个元素,依此类推,x的1个元素与y的1个元素一起使用等等,以便输出代替:


13 
22 
31 

对不起,如果我不是措辞这个权利,我似乎无法用言语表达它的权利。

编辑:我想你可以在Haskell中使用列表解析和语言扩展。 ParallelListComps什么的。

回答

11

可以简单地做

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

interleave产生交替的从给定的序列和partition团此序列引入n元素序列元素的序列。

1

这是更succint:

(doall (map println [1 2 3] [3 2 1])) 
相关问题