Двумерная застежка-молния

Вдохновленный недавним вопросом о 2d-сетках в Haskell, я ' Мне интересно, можно ли создать двухмерную застежку-молнию для отслеживания позиции в списке списков. Одномерная застежка-молния в списке позволяет нам действительно эффективно перемещаться локально в большом списке (распространенный пример - текстовый редактор). Но, допустим, у нас есть второе измерение, подобное этому:

grid = 
    [[ 1, 2, 3, 4, 5]
    ,[ 6, 7, 8, 9,10]
    ,[11,12,13,14,15]
    ,[16,17,18,19,20]
    ,[21,22,23,24,25]]

Можем ли мы создать какую-то структуру данных на молнии для эффективного перемещения не только влево и вправо, но и вверх и вниз по сетке? Если да, то что, если мы заменим список списков бесконечным списком бесконечных списков, сможем ли мы получить эффективное перемещение?

23
задан imz -- Ivan Zakharyaschev 14 July 2012 в 09:50
поделиться