He notado que la mayoría de los lenguajes funcionales emplean una lista enlazada individualmente (una lista de "contras") como sus tipos de lista más fundamentales. Los ejemplos incluyen Common Lisp, Haskell y F #. Esto es diferente a los idiomas principales, donde los tipos de listas nativas son matrices.
¿Porqué es eso?
Para Common Lisp (que se escribe dinámicamente) tengo la idea de que las desventajas son lo suficientemente generales como para ser también la base de listas, árboles, etc. Esto podría ser una pequeña razón.
Sin embargo, para los idiomas tipados estáticamente, no puedo encontrar un buen razonamiento, incluso puedo encontrar contraargumentos:
- El estilo funcional fomenta la inmutabilidad, por lo que la facilidad de inserción de la lista vinculada es menos ventajosa,
- El estilo funcional fomenta la inmutabilidad, también el intercambio de datos; una matriz es más fácil de compartir "parcialmente" que una lista vinculada,
- También podría hacer una coincidencia de patrones en una matriz regular, e incluso mejor (podría doblar fácilmente de derecha a izquierda, por ejemplo),
- Además de eso, obtienes acceso aleatorio gratis,
- Y (una ventaja práctica) si el idioma se escribe estáticamente, puede emplear un diseño de memoria regular y obtener un aumento de velocidad de la memoria caché.
Entonces, ¿por qué preferir las listas vinculadas?
an array is easier to share "partially" than a linked list
necesario aclarar lo que quieres decir. Debido a su naturaleza recursiva, lo contrario es cierto según lo entiendo: puede compartir parcialmente una lista vinculada más fácilmente pasando cualquier nodo en ella, mientras que una matriz necesitaría pasar tiempo haciendo una nueva copia. O en términos de intercambio de datos, dos listas vinculadas pueden apuntar al mismo sufijo, lo que simplemente no es posible con las matrices.