2015-09-29 45 views
0

這可能是一個常見問題,或者我不應該使用flatten,但我不完全明白髮生了什麼?Clojure,Flatten回報實現= 0

的想法是採取二維矢量[[x][y][z]],並返回一維集合(不真正關心現在是什麼形式,現在如(x y z)[x y z]都好。

但是,如果我這樣做( subbed是2D矢量:

(let [flat-coll (flatten subbed)       
     header-less (subvec flat-coll 0 (count flat-coll))] 
... 
) 

flat-col的值是realized = 0,並且我期待它成爲扁平收藏價值

我想它是懶惰的,有沒有更好的方式來實現我想要的?

+0

我不知道你想達到什麼。這不就是「扁平化」的目的嗎? –

回答

1

flat-coll是因爲flatten一個序列返回序列,therfor subvec沒有任何工作

怎麼樣(take 3 (flatten [ [1] [2] [3] ]))獲得header-less

雖然我不entierly明白你的目標是做什麼,因爲你案例得到所有元素。

也許你想要做(vec (flatten [ [1] [2] [3] ]))得到一個載體?

+0

這是需要的'vec'!謝謝,subvec本意是從索引1開始,而不是0。 –

1

如果你只是想一個向量作爲結果,你可以使用傳感器來壓平:

(into [] cat [[2] [3]]) 
;=> [2 3] 

如果你也想擺脫頭:

(into [] (comp cat (drop 1)) [[2] [3] [8]]) 
;=> [3 8] 
0

如果你不這樣做關心矢量或列表還可以做:

user=> (apply concat [[:x][:y][:z]]) 
(:x :y :z) 

它返回一個懶惰的seq。