【发布时间】:2020-01-02 11:47:15
【问题描述】:
在 Clojure 中处理此类内容的惯用方式是什么?
我有:
(def data1
[1 [2 3]])
(def data2
[1 [[2 [3 [4]]]
[22 33]]])
我想得到:
[1 2 3]
和
[[1 2 3 4]
[1 22 33]]
分别。内部向量的嵌套层级可能有不同的长度。
我无法理解此类输入的性质并寻求帮助。基本上,一个函数应该将一个输入(它是一个向量)映射到一个输出(也是一个向量),它本质上是从它的头部到最里面的元素的所有“路线”的一个向量。这是一个模糊的解释,将不胜感激。
【问题讨论】:
-
输入总是长度为2的向量吗?您的示例中的第二个元素具有不同的结构,一个是数字向量,另一个是向量向量。结构各部分的解释是什么?
-
@Lee,不,输入并不总是长度为 2 的向量。在其平凡的形式中,它可能只是 [1],应该导致 [[1]]。换句话说,输入有 1 个或 2 个元素(其中第 2 个元素是向量或数字)。将输入视为每个向量都是一个分支的树可能会有所帮助。
-
我认为你已经一针见血了:这对我来说看起来像是深度优先搜索。
tree-seq是以您正在寻找的方式遍历数据结构的惯用方式,但我不清楚您正在寻找什么输出。例如,您希望从中得到什么输出?(def data3 [1 [[2 [3 [4]]] [22 33] 44]]) -
@柯南,应该是
[[1 2 3 4] [1 22 33] [1 44]]。