J'étais juste curieux au sujet de certains exacte détails de mise en œuvre de listes en Haskell (GHC-spécifiques, les réponses sont à la fin)--sont-ils naïfs listes liées, ou ont-ils des optimisations spéciales? Plus précisément:
- N'
length
et(!!)
(par exemple) pour itérer sur la liste? - Si oui, sont leurs valeurs mises en cache en quelque sorte (c'est à dire, si je l'appelle,
length
deux fois, il va à la parcourir deux fois)? - L'accès à l'arrière de la liste impliquent une itération à travers l'ensemble de la liste?
- Sont infinies des listes et des interprétations de la liste memoized? (c'est à dire, pour
fib = 1:1:zipWith (+) fib (tail fib)
, sera chaque valeur doit être calculée de manière récursive, ou que ça va s'appuyer sur la précédente valeur calculée?)
Toute autre intéressants détails de mise en œuvre serait très apprécié. Merci à l'avance!