Come potrebbe essere implementato un vero tipo Vector in Haskell? Affinché qualcosa sia un vettore, deve essere archiviato sequenzialmente in memoria, con O(1)
accesso casuale. Ma Haskell nasconde la sua gestione della memoria ei suoi tipi di dati descrivono gli alberi! Allora, come potresti esprimere questo tipo di requisito?
Commenti
Risposta
Non tutti i tipi di dati in Haskell sono alberi. Ci sono anche i tipi incorporati come functions o Int. Tra questi trovi il tipo Array che ti dà accesso O (1) ai suoi elementi.
Alcuni compilatori, come GHC, forniscono anche array unboxed. Quelli utilizzano meno memoria e laccesso per elemento è più veloce, ma ovviamente ciò non cambia la complessità.
Oltre a questi array si possono creare tipi di dati simili a std::vector
in C ++. Un esempio è la libreria vector .
Answer
Dovresti esaminare Data.Vector.Unboxed
e Data.Vector.Mutable
nel pacchetto vettoriale:
std::vector
).