Hoe kan een echt Vector-type worden geïmplementeerd in Haskell? Om iets een Vector te laten zijn, moet het opeenvolgend in het geheugen worden opgeslagen, met O(1)
willekeurige toegang. Maar Haskell verbergt zijn geheugenbeheer en zijn datatypes beschrijven bomen! Dus hoe zou je dat soort vereisten kunnen uitdrukken?
Opmerkingen
Answer
Niet alle gegevenstypen in Haskell zijn bomen. Er zijn ook de ingebouwde typen zoals functies of Int. Onder deze vind je het type Array die je O (1) toegang geeft tot zijn elementen.
Sommige compilers, zoals GHC, bieden ook arrays uit de doos. Die gebruiken minder geheugen en de toegang is per element sneller, maar dat verandert natuurlijk niets aan de complexiteit.
Bovenop die arrays kan men datatypes bouwen die vergelijkbaar zijn met std::vector
in C ++. Een voorbeeld is de vector bibliotheek.
Antwoord
Je moet Data.Vector.Unboxed
en Data.Vector.Mutable
in het vectorpakket bekijken:
std::vector
).