如何创建 Clojure 拉链
How to create Clojure Zipper
如何使用 Clojure Zipper (vector-zip
) 创建以下图表:
A
/ | \
B C D
/ \
E F
我试过了
(vector-zip ["A" ["B" "C" "D"["E" "F"]] ])
它returns
[["A" ["B" "C" "D" ["E" "F"]]] nil]
对吗?
是的,没错。对您的代码进行一些测试:
(require '[clojure.zip :as zip])
(def zv (zip/vector-zip ["A" ["B" "C" "D"["E" "F"]]]))
(-> zv zip/next) ; => ["A" {:l [], :pnodes [["A" ["B" "C" "D" ["E" "F"]]]], :ppath nil, :r (["B" "C" "D" ["E" "F"]])}]
(-> zv zip/next zip/node) ; => "A"
(-> zv zip/next zip/next zip/next zip/node) ; => "B"
(-> zv zip/next zip/next zip/children) ; => ("B" "C" "D" ["E" "F"])
如何使用 Clojure Zipper (vector-zip
) 创建以下图表:
A
/ | \
B C D
/ \
E F
我试过了
(vector-zip ["A" ["B" "C" "D"["E" "F"]] ])
它returns
[["A" ["B" "C" "D" ["E" "F"]]] nil]
对吗?
是的,没错。对您的代码进行一些测试:
(require '[clojure.zip :as zip])
(def zv (zip/vector-zip ["A" ["B" "C" "D"["E" "F"]]]))
(-> zv zip/next) ; => ["A" {:l [], :pnodes [["A" ["B" "C" "D" ["E" "F"]]]], :ppath nil, :r (["B" "C" "D" ["E" "F"]])}]
(-> zv zip/next zip/node) ; => "A"
(-> zv zip/next zip/next zip/next zip/node) ; => "B"
(-> zv zip/next zip/next zip/children) ; => ("B" "C" "D" ["E" "F"])