2009-08-01 41 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])) 
相關問題