Pertanyaan Apa yang baru dalam struktur data murni fungsional sejak Okasaki? , dan jawaban epik jbapple, disebutkan menggunakan daftar perbedaan dalam pemrograman fungsional (sebagai lawan dari pemrograman logika), yang merupakan sesuatu yang baru-baru ini saya minati. Hal ini membuat saya menemukan implementasi daftar perbedaan untuk Haskell. Saya memiliki dua pertanyaan (maafkan saya jika saya harus membuat dua pertanyaan berbeda di StackExchange).
Pertanyaan sederhananya adalah, adakah yang mengetahui pertimbangan akademis tentang daftar perbedaan dalam pemrograman fungsional dan / atau implementasi selain yang ada di perpustakaan Haskell? Jawaban jbapple tidak memberikan kutipan untuk daftar perbedaan (daftar perbedaan dalam pemrograman logika ada di pengetahuan dan dalam beberapa sumber yang saya miliki Around Here Somewhere (TM)). Sebelum menemukan implementasi Haskell saya tidak menyadari bahwa ide itu telah melompat dari logika ke pemrograman fungsional. Memang, daftar perbedaan Haskell adalah sesuatu penggunaan alami fungsi tingkat tinggi dan bekerja sangat berbeda dari yang ada di pemrograman logika, tetapi antarmuka tentu mirip.
Hal yang lebih menarik (dan jauh lebih membingungkan) yang ingin saya tanyakan adalah apakah batas atas asimtotik yang diklaim untuk pustaka daftar perbedaan Haskell tersebut tampaknya benar / masuk akal. Kebingungan saya mungkin karena saya kehilangan sesuatu tentang yang jelas tentang kompleksitas alasan dengan kemalasan, tetapi batas yang diklaim hanya masuk akal bagi saya jika penggantian atas struktur data yang besar (atau pembentukan penutupan, atau pencarian variabel, atau sesuatu ) selalu membutuhkan waktu yang konstan. Atau "tangkapan" semata-mata karena tidak ada batasan waktu berjalan untuk "kepala" dan "ekor" justru karena operasi-operasi itu mungkin harus melalui tumpukan perhitungan / pergantian yang ditangguhkan secara sewenang-wenang?
sumber
Jawaban:
fromList
head
tail
[a] -> [a]
toList
sumber
Ya, batas-batasnya tergantung pada asumsi bahwa komposisi fungsi membutuhkan waktu yang konstan. Pada dasarnya, jika Anda memiliki daftar bergabung:
sumber