Cum ar putea fi implementat un tip Vector adevărat în Haskell? Pentru ca ceva să fie un Vector, trebuie să fie stocat secvențial în memorie, cu O(1) acces aleatoriu. Dar Haskell își ascunde gestionarea memoriei, iar tipurile sale de date descriu copacii! Deci, cum ați putea exprima acest tip de cerință?

Comentarii

  • Utilizați definițiile matematice pentru vectori adevărați. Aici ' o bibliotecă de spațiu vectorial pentru dvs. hackage.haskell.org/package/vector-space-0.8.7/docs/ …
  • De unde vin acele cerințe pentru Vector? Cunosc mai multe definiții ale termenului ' vector ' și doar unul dintre ele are astfel de cerințe (C ++ ' s std::vector).
  • Unii se extind în același mod ca și cum se stochează o valoare în registru în C sau C ++, sau liber memorie în limbaj GC – compilatorul este liber să rearanjeze datele, să plaseze valorile în registru etc. sau să expună lucrurile prin (extensii) [ tinyurl.com/ovvxtqt]/(libraries) [http://hackage.haskell.org/… pentru programatori dacă au într-adevăr nevoie de ele – dar presupunerea este că nu le pasă ' în majoritatea cazurilor. În mod similar, programatorii Haskell nu ' nu au grijă, în majoritatea cazurilor, dacă datele sunt împachetate în regiunea secvențială a memoriei în loc de, de exemplu, eliminând în totalitate necesitatea evaluării.

Răspuns

Nu toate tipurile de date din Haskell sunt copaci. Există, de asemenea, tipuri integrate, cum ar fi funcțiile sau Int. Printre acestea găsiți tipul Array care vă oferă acces O (1) la elementele sale.

Unele compilatoare, precum GHC, oferă, de asemenea, matricele necăsuțate. Cei folosesc mai puțină memorie și accesul pe element este mai rapid, dar asta nu schimbă complexitatea, desigur.

Pe lângă aceste matrice se pot construi tipuri de date similare cu std::vector în C ++. Un exemplu este biblioteca vector .

Răspuns

Ar trebui să vă uitați la Data.Vector.Unboxed și Data.Vector.Mutable în pachetul vector:

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

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *