La pregunta ¿Qué hay de nuevo en estructuras de datos puramente funcionales desde Okasaki? , y la respuesta épica de jbapple, mencionó el uso de listas de diferencias en la programación funcional (en oposición a la programación lógica), que es algo que me ha interesado recientemente. Esto me llevó a encontrar la implementación de la lista de diferencias para Haskell. Tengo dos preguntas (perdóname / corrígeme si debo hacer dos preguntas diferentes en StackExchange).
La simple pregunta es, ¿alguien conoce la consideración académica de las listas de diferencias en la programación funcional y / o implementaciones además de la de la biblioteca Haskell? La respuesta de jbapple no dio una cita para las listas de diferencias (las listas de diferencias en la programación lógica existen en la tradición y en un par de fuentes que tengo Around Here Somewhere (TM)). Antes de encontrar la implementación de Haskell, no sabía que la idea había saltado de la lógica a la programación funcional. Por supuesto, las listas de diferencias de Haskell son una especie de uso natural de las funciones de orden superior y funcionan de manera bastante diferente a las de la programación lógica, pero la interfaz es ciertamente similar.
Lo más interesante (y mucho más difuso) sobre lo que quería preguntar es si el límite superior asintótico reclamado para la biblioteca de la lista de diferencias de Haskell mencionada anteriormente parece correcto / plausible. Mi confusión puede deberse a que me falta algo obvio sobre el razonamiento de complejidad con pereza, pero los límites reclamados solo tienen sentido para mí si la sustitución sobre una estructura de datos grande (o formación de cierre, o búsqueda variable, o algo ) siempre lleva tiempo constante. ¿O es la "captura" simplemente que no hay límite en el tiempo de ejecución para "cabeza" y "cola" precisamente porque esas operaciones pueden tener que pasar por un montón arbitrario de cálculos / sustituciones diferidos?