Ho notato che la maggior parte dei linguaggi funzionali impiega una lista collegata singolarmente (una lista "contro") come i loro tipi di lista più fondamentali. Gli esempi includono Common Lisp, Haskell e F #. Questo è diverso dalle lingue tradizionali, dove i tipi di liste native sono matrici.
Perché?
Per Common Lisp (essendo digitato dinamicamente) ho l'idea che i contro siano abbastanza generali da essere anche la base di liste, alberi, ecc. Questo potrebbe essere un piccolo motivo.
Per i linguaggi tipizzati staticamente, tuttavia, non riesco a trovare un buon ragionamento, posso persino trovare argomenti contrari:
- Lo stile funzionale incoraggia l'immutabilità, quindi la facilità di inserimento della lista collegata è meno vantaggiosa,
- Lo stile funzionale incoraggia l'immutabilità, quindi anche la condivisione dei dati; un array è più facile da condividere "parzialmente" rispetto a un elenco collegato,
- Si potrebbe fare la corrispondenza dei pattern su un array regolare altrettanto bene, e anche meglio (si potrebbe facilmente piegare da destra a sinistra per esempio),
- Oltre a ciò ottieni un accesso casuale gratuito,
- E (un vantaggio pratico) se la lingua è tipizzata staticamente, puoi utilizzare un normale layout di memoria e ottenere un aumento di velocità dalla cache.
Quindi, perché preferire gli elenchi collegati?