Saya perhatikan bahwa sebagian besar bahasa fungsional menggunakan daftar yang terhubung sendiri (daftar "kontra") sebagai jenis daftar yang paling mendasar. Contohnya termasuk Common Lisp, Haskell dan F #. Ini berbeda dengan bahasa umum, di mana jenis daftar asli adalah array.
Mengapa demikian?
Untuk Common Lisp (diketik secara dinamis) saya mendapatkan ide bahwa kontra cukup umum untuk menjadi basis daftar, pohon, dll. Ini mungkin merupakan alasan kecil.
Untuk bahasa yang diketik secara statis, saya tidak dapat menemukan alasan yang bagus, saya bahkan dapat menemukan argumen-kontra:
- Gaya fungsional mendorong kekekalan, sehingga kemudahan penyisipan daftar yang ditautkan kurang menguntungkan,
- Gaya fungsional mendorong kekekalan, demikian juga berbagi data; sebuah array lebih mudah untuk dibagikan "sebagian" dari daftar yang ditautkan,
- Anda dapat melakukan pencocokan pola pada array biasa juga, dan bahkan lebih baik (Anda dapat dengan mudah melipat dari kanan ke kiri misalnya),
- Selain itu, Anda mendapatkan akses acak gratis,
- Dan (keuntungan praktis) jika bahasa diketik secara statis, Anda dapat menggunakan tata letak memori biasa dan mendapatkan peningkatan kecepatan dari cache.
Jadi mengapa memilih daftar yang ditautkan?
an array is easier to share "partially" than a linked list
perlu klarifikasi untuk apa yang Anda maksud. Karena sifat rekursif mereka, yang terjadi adalah kebalikannya seperti yang saya pahami - Anda dapat sebagian membagi daftar yang tertaut dengan lebih mudah dengan meneruskan simpul apa pun di dalamnya, sementara sebuah array perlu menghabiskan waktu membuat salinan baru. Atau dalam hal berbagi data, dua daftar tertaut dapat menunjuk ke akhiran yang sama, yang jelas tidak mungkin dengan array.