【发布时间】:2016-09-11 17:09:20
【问题描述】:
我正在尝试使用递归来遍历 Clojure 中任意嵌套的向量和映射树,并返回一个仅包含关键字的向量,包括顶部。
所以下面的示例数据应该返回:
[:top :top :top :top :top :top :top :top :bottom :bottom :bottom :bottom :bottom :bottom :bottom :bottom :bottom :bottom :bottom :bottom],
但没有特定的顺序。
有人可以帮我正确地做到这一点吗?以下是我目前所拥有的。
(def sample [{:top {:top {:top [:bottom {:top {:top [:bottom :bottom :bottom]}} :bottom :bottom :bottom]}}},
{:top {:top [:bottom :bottom :bottom]}},
{:top [:bottom :bottom]}])
(defn make-flat [graph]
(loop [graph graph]
(if (every? keyword? graph) graph
(recur (into graph (flatten (seq (first (filter #(not (keyword? %)) graph)))))))))
(make-flat sample)
【问题讨论】:
-
为什么一开始就有这样一个任意嵌套的序列?通常,只生成一开始就正确形成的数据,而不是对其应用这种奇怪的修复,这通常是可能的,而且更好。
-
这是一个编码挑战 :)
-
如果这是一个编码挑战,而我给了你答案,我是否因解决编码挑战而获得奖励?
-
我实际上已经解决了这个挑战,但我个人正在寻找一个更通用的解决方案来解决我上面概述的问题。我可以通过接受您的回答来表扬您。
标签: recursion clojure tree nested flatten