Mir ist aufgefallen, dass die meisten funktionalen Sprachen eine einfach verknüpfte Liste (eine "Nachteile" -Liste) als ihre grundlegendsten Listentypen verwenden. Beispiele hierfür sind Common Lisp, Haskell und F #. Dies unterscheidet sich von Standardsprachen, bei denen die systemeigenen Listentypen Arrays sind.
Warum das?
Für Common Lisp (dynamisch getippt) habe ich die Idee, dass die Nachteile allgemein genug sind, um auch die Basis für Listen, Bäume usw. zu sein. Dies könnte ein winziger Grund sein.
Für statisch typisierte Sprachen kann ich jedoch keine gute Begründung finden, ich kann sogar Gegenargumente finden:
- Der funktionale Stil fördert die Unveränderlichkeit, daher ist das einfache Einfügen der verknüpften Liste weniger von Vorteil.
- Der funktionale Stil fördert die Unveränderlichkeit, also auch den Datenaustausch. Ein Array lässt sich leichter "teilweise" teilen als eine verknüpfte Liste.
- Sie können den Mustervergleich auch für ein reguläres Array durchführen, und noch besser (Sie können beispielsweise leicht von rechts nach links falten).
- Darüber hinaus erhalten Sie freien Zugang,
- Und (ein praktischer Vorteil) wenn die Sprache statisch geschrieben ist, können Sie ein reguläres Speicherlayout verwenden und eine Geschwindigkeitssteigerung aus dem Cache erhalten.
Warum also verknüpfte Listen bevorzugen?
an array is easier to share "partially" than a linked list
geklärt werden, was Sie meinen. Aufgrund ihrer rekursiven Natur ist meines Wissens das Gegenteil der Fall - Sie können eine verknüpfte Liste zum Teil einfacher freigeben, indem Sie einen beliebigen Knoten darin übergeben, während ein Array Zeit für die Erstellung einer neuen Kopie benötigen würde. Bei der gemeinsamen Nutzung von Daten können zwei verknüpfte Listen auf dasselbe Suffix verweisen, was bei Arrays einfach nicht möglich ist.