La domanda Cosa c'è di nuovo nelle strutture di dati puramente funzionali da Okasaki? e l'epica risposta di jbapple, menzionata usando liste di differenze nella programmazione funzionale (al contrario della programmazione logica), che è qualcosa che mi ha interessato di recente. Questo mi ha portato a trovare l' implementazione delle liste di differenze per Haskell. Ho due domande (perdonami / correggimi se dovessi farle due domande diverse su StackExchange).
La semplice domanda è: qualcuno è a conoscenza della considerazione accademica degli elenchi delle differenze nella programmazione funzionale e / o implementazioni oltre a quella nella biblioteca di Haskell? La risposta di jbapple non ha fornito una citazione per gli elenchi delle differenze (gli elenchi delle differenze nella programmazione logica esistono nella tradizione e in un paio di fonti che ho Around Here Somewhere (TM)). Prima di trovare l'implementazione di Haskell non ero consapevole che l'idea fosse passata dalla logica alla programmazione funzionale. Certo, gli elenchi delle differenze di Haskell sono una sorta di uso naturale di funzioni di ordine superiore e funzionano in modo molto diverso da quelli della programmazione logica, ma l'interfaccia è sicuramente simile.
La cosa più interessante (e di gran lunga più sfacciata) che volevo chiedere è se il limite superiore asintotico dichiarato per la suddetta libreria dell'elenco delle differenze di Haskell sembra corretto / plausibile. La mia confusione potrebbe essere perché mi manca qualcosa di ovvio sul ragionamento della complessità con la pigrizia, ma i limiti dichiarati hanno senso per me solo se la sostituzione su una grande struttura di dati (o formazione di chiusura, o ricerca variabile o qualcosa ) richiede sempre tempo costante. O la "cattura" è semplicemente che non ci sono limiti al tempo di esecuzione di "testa" e "coda" proprio perché quelle operazioni potrebbero dover passare attraverso una pila arbitraria di calcoli / sostituzioni differite?