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

  • Použijte matematické definice pro skutečné vektory. Zde ' je pro vás knihovna vektorového prostoru hackage.haskell.org/package/vector-space-0.8.7/docs/ …
  • Odkud pocházejí tyto požadavky na Vector? Znám více definic pojmu ' vector ' a tyto požadavky má pouze jedna z nich (C ++ ' s std::vector).
  • Do jisté míry stejným způsobem, jak ukládat hodnotu do registru, řekněme C nebo C ++, nebo zdarma paměť v jazyce GC – překladač může libovolně přeskupovat data, ukládat hodnoty do registru atd. nebo vystavovat věci pomocí (rozšíření) [ tinyurl.com/ovvxtqt]/(libraries) [http://hackage.haskell.org/… programátorům, pokud je skutečně potřebují – ale předpokládá se, že jim to ' ve většině případů nezáleží. Podobně programátoři Haskell nedělají ' ve většině případů péči, pokud jsou data zabalena do sekvenční oblasti paměti místo, například například zcela eliminuje potřebu vyhodnocení.

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ěď

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *