Ich war nur neugierig auf einige genaue Implementierungsdetails von Listen in Haskell (GHC-spezifische Antworten sind in Ordnung) - sind sie naiv verknüpfte Listen oder haben sie spezielle Optimierungen? Insbesondere:Wie werden Listen in Haskell (GHC) implementiert?
- Sie
length
und(!!)
(zum Beispiel) haben durch die Liste zu durchlaufen? - Wenn ja, sind ihre Werte in irgendeiner Weise zwischengespeichert (d. H., Wenn ich zweimal
length
rufe, muss es beide Male iterieren)? - Bewirkt der Zugriff auf die Rückseite der Liste das Durchlaufen der gesamten Liste?
- Sind unendliche Listen und Listenkompressen notiert? (Das heißt, für
fib = 1:1:zipWith (+) fib (tail fib)
, wird jeder Wert rekursiv berechnet werden, oder wird es auf dem vorherigen berechneten Wert verlassen?)
weitere interessante Details der Implementierung wären sehr willkommen. Danke im Voraus!
Haskell hat auch [Anordnungen] (https://wiki.haskell.org/Arrays) und ["veränderbare Arrays"] (https://hackage.haskell.org/package/array-0.5.1.0/docs/Data-Array-ST.html). – osa