Se sto contando i occorrenze di caratteri di una stringa, ho potuto facilmente implementare questo utilizzando una matrice in un linguaggio imperativo, come il seguente:Come posso implementare una raccolta con indicizzazione O (1) e mutabilità in Haskell?
char values[256]; char c;
while (c = readChar()) {
values[c] += 1;
}
posso vedere come fare questo in Haskell utilizzando qualcosa come Data.Vector.Mutable
, che fornisce un'implementazione veloce di matrici int-index mutable.
Ma come potrei farlo facilmente utilizzando Haskell senza pacchetti e/o estensioni aggiuntivi? In altre parole, come posso implementare una raccolta O (1) veloce con indicizzazione e mutabilità?
@Lee non sono sicuro se si tratta solo di accedere all'indice, poiché anche la struttura dei dati deve essere mutabile (o fornire un modo per aggirare la mutabilità altrimenti mantenendo O (1)) –
Perché vuoi farlo senza pacchetti aggiuntivi? Se vuoi un array mutabile è esattamente ciò che è "Data.Vector.Mutable"! –
@TomEllis Solo perché c'è una libreria per fare qualcosa, non significa che si dovrebbe sempre usare la libreria. Sto cercando di capire come funziona sotto e come posso implementarlo in modo semplice. Re-implementare una libreria è il modo migliore per capire come funziona. –