Zipperデータ構造とは何ですか?また、それを使用すべきですか?質問する

Zipperデータ構造とは何ですか?また、それを使用すべきですか?質問する

質問は簡単です。ジッパーデータ構造。

私の質問は、ツリーでの使用に関するものです。

ジッパーを使用してツリー ノードを変更する方法を理解したいです。また、ツリー全体 (またはその大部分) をコピーしない方法も知りたいです。

ジッパーについて私が間違っているかどうかを明確にしてください。ツリーの更新には役立たないのでしょうか?
あるいは、ツリーを更新することは可能で、方法がわからないだけなのでしょうか?

ベストアンサー1

まず、リストの Zipper 類似物から始めましょう。リストの n 番目の要素を変更する場合、最初の n-1 要素をコピーする必要があるため、O(n) かかります。代わりに、リストを構造 ((最初の n-1 要素を反転) n 番目の要素 (残りの要素)) として保持できます。たとえば、(1 2 3 4 5 6)3 で変更可能なリストは と表されます((2 1) 3 (4 5 6))。これで、3 を別のものに簡単に変更できます。フォーカスを左右((1) 2 (3 4 5 6))に簡単に移動することもできます((3 2 1) 4 (5 6))

ジッパーは、ツリーに適用された同じアイデアです。ツリー内の特定のフォーカスとコンテキスト (親まで、子まで) を表すことで、フォーカスで簡単に変更でき、フォーカスを上下に簡単に移動できる形式でツリー全体が得られます。

おすすめ記事