Dav*_*ked 2 tree traversal graph clojure
如何在惯用的Clojure中表达以下转变?
(def m
{:a {:b {:c nil
:d nil}}
:e nil}})
(map->edges m) ; =>
([:a :b] [:b :c] [:b :d] [:e nil] [:d nil] [:a :e] [:e nil])
Run Code Online (Sandbox Code Playgroud)
我不关心向量在结果中出现的顺序,因此深度优先或先呼吸搜索策略都可以.
(defn map->edges [m]
(for [entry m
[x m] (tree-seq some? val entry)
y (or (keys m) [m])]
[x y]))
Run Code Online (Sandbox Code Playgroud)
例:
(map->edges m)
;;=> ([:a :b] [:a :e] [:b :c] [:b :d] [:c nil] [:d nil] [:e nil])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |