Jak można zaimplementować prawdziwy typ wektorowy w Haskell? Aby coś było wektorem, musi być przechowywane w pamięci sekwencyjnie, z O(1)
dostępem swobodnym. Ale Haskell ukrywa zarządzanie pamięcią, a jego typy danych opisują drzewa! Jak więc możesz wyrazić tego rodzaju wymaganie?
Komentarze
Odpowiedź
Nie wszystkie typy danych w Haskell są drzewami. Istnieją również typy wbudowane, takie jak funkcje lub Int. Wśród nich znajdziesz typ Array , który daje dostęp O (1) do jej elementów.
Niektóre kompilatory, takie jak GHC, również zapewniają tablice rozpakowane. Zużywają one mniej pamięci, a dostęp do każdego elementu jest szybszy, ale to oczywiście nie zmienia złożoności.
Oprócz tych tablic można budować typy danych podobne do std::vector
w C ++. Przykładem jest biblioteka wektorów .
Odpowiedź
Powinieneś spojrzeć na Data.Vector.Unboxed
i Data.Vector.Mutable
w pakiecie wektorowym:
std::vector
).