Jak by mohl být implementován skutečný typ Vector v Haskellu? Aby něco mohlo být Vectorem, musí být uloženo postupně do paměti s O(1)
náhodným přístupem. Ale Haskell skrývá svou správu paměti a její datové typy popisují stromy! Jak byste tedy mohli vyjádřit tento druh požadavku?
Komentáře
Odpověď
Ne všechny datové typy v Haskellu jsou stromy. Existují také vestavěné typy, jako jsou funkce nebo Int. Mezi nimi najdete typ Array , který vám poskytuje přístup k jeho prvkům O (1).
Některé kompilátory, například GHC, také poskytují unboxed arrays. Ti, kteří používají méně paměti, a přístup na jeden prvek je rychlejší, ale to samozřejmě nemění složitost.
Kromě těchto polí lze vytvářet datové typy podobné std::vector
v C ++. Příkladem je vektorová knihovna.
Odpověď
Měli byste se podívat na Data.Vector.Unboxed
a Data.Vector.Mutable
ve vektorovém balíčku:
std::vector
).