質問

Zipper データ構造は、ツリーをトラバースして現在の位置を維持したい場合には最適ですが、複数の位置を追跡したい場合はどのようなデータ構造を使用すればよいでしょうか?

例を挙げて説明しましょう:

  • #haskell チャンネルの誰かが、yiエディタではジッパーが表現に使われていると教えてくれました。 カーソル位置。これは素晴らしいことですが、2つ持ちたい場合はどうでしょうか カーソル。選択範囲を表現したい場合と同様に、先頭と 選択範囲の最後。
  • ウィキブックのミノタウロスの例では、迷宮内のミノタウロスの位置を表すためにジッパーが使用されています。迷宮に敵を追加したい場合は、敵の位置をジッパーで表すことも同様に理にかなっています。
  • 最後の 1 つは、実際にすべてが始まった私のミニ プロジェクトからのものです。Haskell の学習の一環として、cairo と gth2hs を使用してツリー構造を視覚化しようとしています。ここまではうまくいきましたが、今度は 1 つ以上のノードを選択して、たとえば次のことをできるようにしたいと思います。それらを移動させます。選択したノードが複数存在する可能性があるため、単に使用することはできません 教科書で定義されているジッパー。

XMonadの初期バージョンで使用されていたものと同様の、説明したように有限マップを含む自明な(単純な?)解決策があります。 ここ.

つまり、例えば私のサンプル プロジェクトの場合、選択したノードをインデックス付きマップに保存し、メイン構造内のノードの表現をインデックスで置き換えます。しかし、この解決策には多くの欠点があります。上のリンクで説明したものと同様、または私の例の場合、すべてのノードの選択を解除するには、ツリー全体を検索する必要があります。

役に立ちましたか?

解決

オレグさんの取り組み 区切り文字で区切られた継続による「同時」ジッパー が主な参考資料です。

他のヒント

見る この紙 . 。二次導関数には穴が 2 つあるということをどこかで読んだような気がします。おそらくそれがあなたが望んでいることでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top