Comment un vrai type Vector pourrait-il être implémenté dans Haskell? Pour que quelque chose soit un vecteur, il doit être stocké séquentiellement en mémoire, avec un accès aléatoire O(1). Mais Haskell cache sa gestion de la mémoire, et ses types de données décrivent des arbres! Alors, comment pourriez-vous exprimer ce genre dexigence?

Commentaires

  • Utilisez les définitions mathématiques des vrais vecteurs. Voici ' une bibliothèque despace vectoriel pour vous hackage.haskell.org/package/vector-space-0.8.7/docs/ …
  • Doù viennent ces exigences pour Vector? Je connais plusieurs définitions du terme ' vector ' et une seule dentre elles a de telles exigences (C ++ ' s std::vector).
  • Pour certains étendre de la même manière que la façon de stocker une valeur dans un registre, disons C ou C ++, ou vous libérer mémoire en langage GC – le compilateur est libre de réorganiser les données, de mettre les valeurs dans le registre, etc. ou dexposer les choses par (extensions) [ tinyurl.com/ovvxtqt子, etc.) [http://hackage.haskell.org/… aux programmeurs sils en ont vraiment besoin – mais on suppose quils nen ' que »dans la plupart des cas. De la même manière, les programmeurs Haskell ne se soucient ' dans la plupart des cas que si les données sont emballées dans une région séquentielle de la mémoire au lieu de, par exemple, éliminant entièrement le besoin dévaluation.

Réponse

Tous les types de données dans Haskell ne sont pas des arbres. Il existe également des types intégrés comme les fonctions ou Int. Parmi ceux-ci, vous trouverez le type Array qui vous donne un accès O (1) à ses éléments.

Certains compilateurs, comme GHC, fournissent également tableaux sans boîte. Ceux-ci utilisent moins de mémoire et laccès par élément est plus rapide, mais cela ne change pas la complexité bien sûr.

En plus de ces tableaux, on peut créer des types de données similaires à std::vector en C ++. Un exemple est la bibliothèque vector .

Réponse

Vous devriez regarder Data.Vector.Unboxed et Data.Vector.Mutable dans le package vectoriel:

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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *