嵌套地图的Clojure Zipper压制TRIE

0xM*_*xMG 8 clojure trie zipper

如何为嵌套地图表示的TRIE创建Clojure拉链,键是字母.

像这样的东西:

{\b {\a {\n {\a {\n {\a {'$ '$}}}}}} \a {\n {\a {'$ '$}}}}
Run Code Online (Sandbox Code Playgroud)

代表一个带有2个单词'banana'和'ana'的trie.(如有必要,可以在地图中进行一些更改..)

我试图map? vals assoc将3个函数分别传递给拉链.但它似乎没有工作..

我应该使用哪三种功能?

基于拉链,insert-into-trie的外观如何?

cgr*_*and 14

map? vals #(zipmap (keys %1) %2) 会做但不支持插入/删除子项(因为子项只是值,您不知道要删除/添加哪个键).

map-zipper下面不支持的插入/取出,因为节点[KV]双(除了其为图中的根目录).

(defn map-zipper [m]
  (z/zipper 
    (fn [x] (or (map? x) (map? (nth x 1))))
    (fn [x] (seq (if (map? x) x (nth x 1))))
    (fn [x children] 
      (if (map? x) 
        (into {} children) 
        (assoc x 1 (into {} children))))
    m))
Run Code Online (Sandbox Code Playgroud)

  • 我已将此添加到ClojureDocs并提供了此答案的链接.我希望没关系.http://clojuredocs.org/clojure.zip/zipper#example_54d91161e4b081e022073c72 (3认同)