Wenn ich die Vorkommen von Zeichen in einer Zeichenfolge zu zählen, konnte ich dies mit einem Array in einer imperativen Sprache, wie die folgenden leicht implementieren:Wie kann ich eine Sammlung mit O (1) Indizierung und Mutabilität in Haskell implementieren?
char values[256]; char c;
while (c = readChar()) {
values[c] += 1;
}
ich sehen kann, wie dies in Haskell zu tun mit etwas wie Data.Vector.Mutable
, das eine schnelle Implementierung von int-indizierten veränderbaren Arrays bereitstellt.
Aber wie könnte ich dies einfach mit nur Haskell ohne zusätzliche Pakete und/oder Erweiterungen tun? Mit anderen Worten, wie kann ich eine schnelle O (1) Sammlung mit Indizierung und Veränderbarkeit implementieren?
@Lee nicht sicher, ob es nur um den Zugriff auf den Index geht, da die Datenstruktur auch veränderbar sein muss (oder eine Möglichkeit bieten, um die Veränderbarkeit zu umgehen, während das O (1) beibehalten wird) –
Warum möchten Sie es tun ohne zusätzliche Pakete? Wenn Sie ein veränderbares Array haben möchten, ist das genau das, wofür Data.Vector.Mutable steht! –
@TomEllis Nur weil es eine Bibliothek gibt, um etwas zu tun, bedeutet das nicht, dass Sie immer die Bibliothek benutzen sollten. Ich versuche zu verstehen, wie das darunter funktioniert und wie ich es selbst einfach umsetzen kann. Eine Bibliothek neu zu implementieren ist der beste Weg, um zu verstehen, wie es funktioniert. –