Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет kouzdra ([info]kouzdra)
@ 2013-12-12 18:59:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Тут меня некоторое время назад спрашивали как
написать эффективно кольцевой список на Haskell - ответ простой:

Как пару из двух списков - то, что слева и то что справа от текущей позиции.

Как реализовать вставку, удаление я думаю понятно
Прокрутка заключается в перекидывании головного элемента из одного списка в другой, а в случае достижения конца - в инвертировании списка и свопе:
newtype DList a = DList [a] [a]
toLeft (DLlist (a:b) c) = DList b (a:c)
toLeft [] c = DList (rev c) []

По причине ленивости языка сложность операций = O(1)