获取一个函数,该函数输入一组,一组集合,集合,嵌套的嵌入向量,等等。因此,输入有时不是同一类型。如何将这样的输入转换为嵌套的矢量结构?在第一种情况下,我会使用
(into [] #{1 2 3 4})
将转换为矢量。 但是在集合中的集合的情况下,我无法输出嵌套向量,即
#{1 2 3 #{1 2 3}}
同样,我可能有一个输入,如
[1 2 3 (4 5 6)]
我要输出
[1 2 3 [4 5 6]]
我的想法是,有时我需要深入挖掘一个集合或设置变成一个向量。是否可以有一个函数,通常可以处理许多不同的结构输入并输出嵌套的矢量结构。即功能可以概括上述例子吗?我稍微简化了一些示例,例如我可能有输入,如
[[[1 2 3 4] [#{1 2 3 4} 2 3 4] [(1 2 3 4) 2 3 4]]]
为了更深入地了解我正在尝试的函数,请考虑语言R中的函数C.此函数的重要性在于统计/数据分析中向量结构的重要性。
答案 0 :(得分:1)
user=> (use 'clojure.walk)
user=> (clojure.walk/postwalk (fn [e] (if (coll? e) (vec e) e)) '(1 2 3 #{4 5 6 (7 8 9)}))
[1 2 3 [4 5 6 [7 8 9]]]
答案 1 :(得分:1)
天真的减少实施:
(defn to-vectors [c]
(reduce #(conj %1 (if (coll? %2) (to-vectors %2) %2))
[] c))
user=> (to-vectors '[[[1 2 3 4] [#{1 2 3 4} 2 3 4] [(1 2 3 4) 2 3 4]]])
[[[1 2 3 4] [[1 2 3 4] 2 3 4] [[1 2 3 4] 2 3 4]]]