Clojure,Flatten返回实现= 0

时间:2015-09-29 12:29:59

标签: clojure

这可能是一个常见的问题,或者我不应该使用展平,但我不完全理解发生了什么?

我们的想法是采用二维向量[[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,我希望它是展平集合的值。

我想它是懒惰的,是否有更好的'实现我想要的方式?

3 个答案:

答案 0 :(得分:1)

flat-coll是seq,因为flatten返回seq,因此subvec不起作用

获取(take 3 (flatten [ [1] [2] [3] ]))

header-less怎么样?

虽然我并不明白你的目标是什么,因为你无论如何都会得到所有元素。

也许您想要(vec (flatten [ [1] [2] [3] ]))来获取矢量?

答案 1 :(得分:1)

如果你只想要一个矢量作为结果,你可以使用传感器来展平:

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

如果你还想摆脱头脑:

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

答案 2 :(得分:0)

如果您不关心矢量或列表,也可以这样做:

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

返回一个懒惰的序列。