慣れるために、単純なテキスト エディターを clojure で作成しようとしています。構造にジッパーを使用し、エディターをナビゲートして更新することを考えていました。
エディターのテキストを次のようなドキュメントに保存することを考えていました。
(def document-test {
:id "doc1"
:info {
:title "Moluctular bio"
:description "Test document"
}
:nodes [{
:type "header"
:content "This is a header"
:id "h1"
}
{
:type "p"
:content "this is a paragraph"
:id "p1"
}
{
:type "todo"
:content "Todo list"
:id "t1"
:nodes [
{
:type "todoelement"
:content "Do this"
:id "td1"
}
{
:type "todoelement"
:content "Do that"
:id "td2"
}]}]})
だから、これを簡単にナビゲートできるジッパーを作りたい. 多分ジッパーはこれに最適ではないでしょうか?しかし、私は根から始めることを考えていました。下に行くと、その子のノードに移動します。したがって、ドキュメントの先頭は id h1 です。
私は次のものを持っていますが、子を配列にすることはできません:
(defn map-zip [m]
(zip/zipper
#(map? (second %))
#(seq (second %))
(fn [node children] [(first node) (into {} children)])
[:root m]))
次のようなものを期待しています:
{:foo {:bar {:baz 2}}}
何かご意見は?誰かが何か提案があれば、構造を完全に変更することにオープンです。