2015-09-29 41 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。