Вопрос Что нового в чисто функциональных структурах данных со времен Окасаки? и эпический ответ jbapple, упомянутый с использованием списков различий в функциональном программировании (в отличие от логического программирования), что меня недавно интересовало. Это привело меня к поиску реализации списка различий для Haskell. У меня есть два вопроса (простите / исправьте меня, если я должен задать им два разных вопроса в StackExchange).
Простой вопрос заключается в том, знает ли кто-либо об академическом рассмотрении списков различий в функциональном программировании и / или реализациях, помимо списка в библиотеке Haskell? Ответ jbapple не дал цитаты для списков различий (списки различий в логическом программировании существуют в знаниях и в нескольких источниках, которые у меня есть Around Here Somewhere (TM)). До того, как найти реализацию на Haskell, я не знал, что идея перешла от логики к функциональному программированию. Конечно, списки различий в Haskell являются чем-то вроде естественного использования функций более высокого порядка и работают совершенно иначе, чем в логическом программировании, но интерфейс, безусловно, схож.
Более интересная (и не очень понятная) вещь, о которой я хотел спросить, заключается в том, является ли заявленная асимптотическая верхняя граница для вышеупомянутой библиотеки разностных списков на языке Haskell верной / правдоподобной. Моя путаница может быть из-за того, что я упускаю что-то из очевидного в логике сложности, но заявленные границы имеют смысл для меня, только если замена на большую структуру данных (или формирование замыкания, или поиск переменной, или что-то ) всегда занимает постоянное время. Или «подвох» заключается просто в том, что нет ограничений по времени выполнения для «головы» и «хвоста» именно потому, что этим операциям, возможно, придется пахать через произвольную кучу отложенных вычислений / замен?