我想要一种机制来遍历任意嵌套的数据结构。然后在每个节点上应用 fn,然后检查 fn 在每个点是否返回 true。
使用扁平结构很容易做到这一点 -
(walk (complement string?) #(every? true? %) [ 1 2 3 4])
但是 walk 不适用于嵌套的 -
(walk (complement string?) #(every? true? %) [ 1 2 3 [ "a" ]])
仅使用 flatten 也行不通,因为我将地图作为其中一种形式,并且我也希望将 fn 应用于地图中的每个值。这是我将拥有的结构 -
[ ["2012" [{:a 2} {:b 3}]] ["2013" [{:a 2} {:b 3}]] ]
我可以轻松地编写一个 fn 来仅遍历上述内容并将 fn 应用于每个 val。但是有没有办法编写一个通用的遍历机制?