Hogyan valósítható meg egy igazi Vector típus a Haskellben? Annak érdekében, hogy valami vektor legyen, azt szekvenciálisan kell tárolni a memóriában O(1) véletlen hozzáféréssel. De a Haskell elrejti a memóriakezelését, és az adattípusai a fákat írják le! Tehát hogyan lehetne kifejezni az ilyen követelményeket?

Megjegyzések

  • Használja a matematikai definíciókat az igazi vektorokhoz. Itt ' egy vektortár az Ön számára hackage.haskell.org/package/vector-space-0.8.7/docs/ …
  • Honnan erednek ezek a vektorra vonatkozó követelmények? A ' vektor ' kifejezés több definícióját ismerem, és csak egyiküknek vannak ilyen követelményei (C ++ ' s std::vector).
  • Némelyik kiterjed ugyanúgy, mint ahogyan egy értéket a regiszterben tárolunk mondjuk C vagy C ++ nyelven, vagy szabad memória GC nyelven – a fordító szabadon átrendezheti az adatokat, az értékeket nyilvántartásba helyezheti stb., vagy a (kiterjesztések) [ tinyurl.com/ovvxtqt]/(könyvtárak) segítségével teheti közzé a dolgokat. [http://hackage.haskell.org/… a programozóknak, ha valóban szükségük van rájuk – de feltételezhető, hogy nem a ' törődnek velük. Hasonló módon a Haskell programozói nem ' nem törődnek a legtöbb esetben, ha az adatokat szekvenciális memóriaterületre csomagolják, nem pedig például teljesen kiiktatják az értékelés szükségességét.

Válasz

A Haskellben nem minden adattípus fa. Vannak olyan beépített típusok is, mint a függvények vagy az Int. Ezek közül megtalálhatja a Array típust, amely O (1) hozzáférést biztosít az elemekhez.

Néhány fordító, például a GHC, szintén doboz nélküli tömbök. Azok kevesebb memóriát használnak, és az elemenkénti hozzáférés gyorsabb, de ez természetesen nem változtatja meg a bonyolultságot.

Ezen tömbök tetejére fel lehet építeni a std::vector C ++ -ban. Ilyen például az vektor könyvtár.

Válasz

Meg kell néznie a Data.Vector.Unboxed és Data.Vector.Mutable elemeket a vektorcsomagban:

https://hackage.haskell.org/package/vector

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük