Структура данных на молнии с несколькими курсорами - PullRequest
24 голосов
/ 09 августа 2010

Структура данных Zipper хороша, когда нужно пройтись по дереву и сохранить текущую позицию, но какую структуру данных следует использовать, если они хотят отслеживать более одной позиции?

Позвольте мне объяснить с примерами:

  • Кто-то на канале #haskell сказал мне, что в редакторе yi используются молнии для представления положение курсора. Это здорово, но что, если вы хотите иметь два курсоры. Например, если вы хотите представить выборку, вам нужно знать начало и конец выбора.
  • В примере Минотавра на вики-книгах они используют Застежку-молнию для представления положения Минотавра внутри лабиринта. Если бы я хотел добавить противника в лабиринт, то представлять его положение с помощью молнии было бы как нельзя лучше.
  • Последний из моего мини-проекта, с которого все началось: как часть изучения Haskell, я пытаюсь визуализировать древовидную структуру, используя cairo и gth2hs. Пока все прошло хорошо, но сейчас я бы хотел выбрать один или несколько узлов и иметь возможность, например, переместить их. Поскольку может быть более одного из выбранных узлов, я не могу просто использовать Молния, как это определено в учебниках.

Существует тривиальное (наивное?) Решение, подобное тому, которое они использовали в ранних версиях XMonad, которое включает в себя конечные карты, как объяснено здесь .

То есть, например, в случае моего примера проекта я бы сохранил выбранные узлы в индексированной карте и заменил их представление в основной структуре индексами. Но это решение имеет множество недостатков. Как и те, которые описаны в ссылке выше, или, скажем, снова в случае моего примера, отмена выбора всех узлов потребует поиска по всему дереву.

Ответы [ 2 ]

13 голосов
/ 09 августа 2010

Работа Олега над "параллельными" молниями через продолжения с разделителями является основным справочником.

10 голосов
/ 10 августа 2010

См. этот документ . Кажется, я вспоминаю, что читал где-то, что у второй производной есть два отверстия, что, вероятно, то, что вы хотите.

...