Питання Що нового в чисто функціональних структурах даних після Окасакі? , і епічна відповідь jbapple, згадана з використанням списків різниць у функціональному програмуванні (на відміну від логічного програмування), що мене нещодавно цікавило. Це змусило мене знайти реалізацію списку різниць для Haskell. У мене є два запитання (пробачте / виправте мене, якщо я повинен зробити їм два різні запитання на StackExchange).
Просте запитання полягає в тому, чи хтось знає про академічне врахування різницьких списків у функціональному програмуванні та / або реалізаціях, окрім списку в бібліотеці Haskell? Відповідь jbapple не дала цитування для різницьких списків (різницькі списки в логічному програмуванні існують у кращому і в декількох джерелах, які я маю Around Here Somewhere (TM)). Перш ніж знайти реалізацію Haskell, я не знав, що ідея перейшла від логіки до функціонального програмування. Звичайно, списки різниці Haskell є чимось природним використанням функцій вищого порядку і працюють зовсім інакше, ніж в логічному програмуванні, але інтерфейс, безумовно, схожий.
Більш цікава (і куди більш нечітка) річ, про яку я хотів запитати, - чи здається, що заявлена асимптотична верхня межа для вищезгаданої бібліотеки списку різниць Хаскеля видається правильною / правдоподібною. Моя плутанина може бути через те, що я пропускаю щось із очевидним щодо аргументації складності з лінню, але заявлені межі мають сенс для мене, лише якщо заміна на велику структуру даних (або формування закриття, або змінний пошук, або щось таке ) завжди потребує постійного часу. Або "улов" просто у тому, що немає часу для "голови" та "хвоста", не пов'язаного саме з тим, що ці операції, можливо, доведеться орати через довільну купу відкладених обчислень / підстановок?