Çoğu fonksiyonel dil, birincil değişken olmayan veri yapısı olarak bağlantılı listeleri kullanır. Ağaçları neden listeliyor, listelemiyor? Ağaçlar ayrıca yolları ve hatta model listelerini yeniden kullanabilir.
Çoğu fonksiyonel dil, birincil değişken olmayan veri yapısı olarak bağlantılı listeleri kullanır. Ağaçları neden listeliyor, listelemiyor? Ağaçlar ayrıca yolları ve hatta model listelerini yeniden kullanabilir.
Yanıtlar:
Çünkü listeler ağaçlardan daha basittir. (Bunu, bir listenin her düğümün yalnızca tek bir çocuğa sahip olduğu dejenere bir ağaç olduğu gerçeğiyle görebilirsiniz.)
Eksileri listesi keyfi boyutunda mümkün olan en basit özyinelemeli veri yapısıdır.
Guy Steele, Fortress programlama dilinin tasarımı sırasında geleceğin kitlesel paralel hesaplamaları için hem veri yapılarımızın hem de kontrol akışımızın şu anda olduğu gibi doğrusal değil, birden çok dalla ağaç şeklinde olması gerektiğini savundu. Ancak şimdilik, çekirdek veri yapı kütüphanelerimizin çoğu paralel işleme değil, sıralı, yinelemeli işlemlerle (ya da özyinelemeyle özdeşleşir, aslında önemli değil, aynı şeydir) tasarlandı.
Not mesela o kimin veri yapıları özel olarak tasarlanmış edildi Clojure, içinde için , bugünün "bulutlu" dünya, hatta diziler (Clojure denilen vektörler), muhtemelen hepsini veri yapısı "doğrusal" en dağıtılmış paralel, aslında olarak uygulanır ağaçlar.
Yani, kısacası: eksileri listesi mümkün olan en basit kalıcı özyinelemeli veri yapısıdır ve daha karmaşık bir "varsayılan" seçmeye gerek yoktu. Diğerleri elbette seçenekler olarak mevcut, örneğin Haskell'de diziler, öncelik sıraları, haritalar, yığınlar, ikramlar, denemeler ve hayal edebileceğiniz her şey var, ancak varsayılan basit eksiler listesi.
data Tree a = Leaf a | Branch a (Tree a) (Tree a)
. Bu "basitlik" argümanınızı güçlendirir.
Sequence
veya Scala'nın Vector
) aynı seçimi yapar (bazen farklı türdeki ağaçlarda) , ancak yalnızca gerçek zamanlı olarak başarabilecekleri için okumaya ihtiyaç duyduklarında ağaçları kullanmazlar (örn. Haskell'in Vector
veya F # ile. ImmutableArray
pmap
, Clojure'deki bir vektöre ping işlemi, her bir elemana sırayla erişir; vektörün ağaç yapısı genellikle son kullanıcıdan gizlenir.
Aslında bu listelere olan ağaçlar! İki alana sahip olan car
ve cdr
bu gibi düğümleri veya yaprakları daha fazla içerebilen düğümleriniz var. Bu ağaçları listeler haline getiren tek şey , bağlantıyı doğrusal bir listedeki bir sonraki düğüme bağlantı olarak ve bağlantıyı da geçerli düğümün değeri olarak yorumlama kuralıdır .cdr
car
Bununla birlikte, işlevsel programlamada bağlantılı listelerin prevalansının yineleme üzerindeki yineleme prevalansı ile ilişkili olduğunu tahmin ediyorum. Eldeki tek döngü yapınız (kuyruk) özyineleme olduğunda, bununla kullanımı kolay veri yapılarını istersiniz; ve bağlantılı listeler bunun için mükemmeldir.