İşlevsel dillerin çoğunun, en temel liste türleri olarak tek bir bağlantılı liste ("eksiler" listesi) kullandığını fark ettim. Örnekler arasında Common Lisp, Haskell ve F #. Bu, yerel liste türlerinin diziler olduğu genel dillerden farklıdır.
Neden?
Common Lisp (dinamik olarak yazılmış) için, eksilerin listelerin, ağaçların vb. Temeli olacak kadar genel olduğu fikrine kapılıyorum. Bu küçük bir neden olabilir.
Statik olarak yazılmış diller için iyi bir mantık bulamıyorum, hatta karşı-argümanları bile bulabiliyorum:
- İşlevsel stil değişmezliği teşvik eder, bu nedenle bağlantılı listenin yerleştirme kolaylığı bir avantajdan daha düşüktür,
- İşlevsel stil değişmezliği teşvik eder, aynı zamanda veri paylaşımını; Bir dizinin "kısmen" paylaşılması, bağlantılı bir listeden daha kolaydır,
- Düzenli bir dizide desen eşleştirmesini de yapabilir ve hatta daha iyisini yapabilirsiniz (örneğin sağdan sola kolayca katlayabilirsiniz),
- Bunun üzerine ücretsiz rastgele erişim
- Ve (pratik bir avantaj) Dil statik olarak yazılmışsa, düzenli bir bellek düzeni kullanabilir ve önbellekten hızlanmayı sağlayabilirsiniz.
Peki neden bağlantılı listeleri tercih ediyorsun?
an array is easier to share "partially" than a linked list
ne demek istediğinizi netleştirmeniz gerektiğini düşünüyorum . Özyinelemeli doğası nedeniyle, anladığım gibi doğrudur - bir dizinin yeni bir kopya oluşturmak için zaman harcaması gerekirken, içindeki herhangi bir düğümü geçirerek bağlantılı bir listeyi kısmen paylaşabilirsiniz. Veya veri paylaşımı açısından, iki bağlantılı liste aynı düzene işaret edebilir, bu da sadece düz dizilerde mümkün değildir.