Hvordan kan en ekte Vektortype implementeres i Haskell? For at noe skal være en Vector, må det lagres sekvensielt i minnet, med O(1)
tilfeldig tilgang. Men Haskell skjuler minnehåndteringen, og datatypene beskriver trær! Så hvordan kan du uttrykke den slags krav?
Kommentarer
Svar
Ikke alle datatyper i Haskell er trær. Det er også de innebygde typene som funksjoner eller Int. Blant dem finner du typen Array som gir deg O (1) tilgang til elementene.
Noen kompilatorer, som GHC, gir også unboxed arrays. De bruker mindre minne og tilgang per element er raskere, men det endrer selvfølgelig ikke kompleksiteten.
På toppen av disse matriser kan man bygge datatyper som ligner std::vector
i C ++. Et eksempel er vektor -biblioteket.
Svar
Du bør se på Data.Vector.Unboxed
og Data.Vector.Mutable
i vektorpakken:
std::vector
).