Hvordan kunne en ægte vektortype implementeres i Haskell? For at noget skal være en vektor, skal det gemmes sekventielt i hukommelsen med O(1)
tilfældig adgang. Men Haskell skjuler sin hukommelsesstyring, og dens datatyper beskriver træer! Så hvordan kunne du udtrykke den slags krav?
Kommentarer
Svar
Ikke alle datatyper i Haskell er træer. Der er også de indbyggede typer som funktioner eller Int. Blandt dem finder du typen Array , som giver dig O (1) adgang til dens elementer.
Nogle compilere, som GHC, giver også unboxed arrays. De bruger mindre hukommelse, og adgangen pr. Element er hurtigere, men det ændrer naturligvis ikke kompleksiteten.
Oven på disse arrays kan man oprette datatyper, der ligner std::vector
i C ++. Et eksempel er vektor biblioteket.
Svar
Du skal se på Data.Vector.Unboxed
og Data.Vector.Mutable
i vektorpakken:
std::vector
).