Sortieren und Vergleichen von Zeichenfolgen nach Gebietsschemas in Haskell?

8

ist es möglich, Zeichenketten mit nationalen Zeichen in Haskell (GHC) richtig zu sortieren? Mit anderen Worten, korrigieren Sie die Sortierung von Chars nach aktuellen Gebietsschemaeinstellungen?

Ich habe nur das ICU-Modul gefunden, aber es muss extra Bibliothek installiert werden, da es kein Standardteil von Linux-Distributionen ist. Ich hätte gerne eine Lösung, die auf der C (Glibc like) -Bibliothek von POSIX basiert, so dass es keine Probleme mit der Handhabung zusätzlicher Abhängigkeiten gibt.

    
David Unric 15.05.2011, 21:26
quelle

1 Antwort

13

Empfohlener Weg: text-icu

Die empfohlene Methode zur robusten Verarbeitung von Zeichenfolgen in einer für die Ländereinstellung sinnvollen Weise lautet text und text-icu , wie Sie gesehen haben. Die Text -Bibliothek ist im Standard-Bibliothekssatz, der Haskell-Plattform .

Ein Beispiel zum Sortieren türkischer Strings:

%Vor%

scheint korrekt zu sortieren nach lexikographische Anordnung basierend auf dem Gebietsschema, nach korrektem Unterlegen der türkischen Zeichenkette:

%Vor%

Das text-icu-Paket wird nicht verwendet

Sie haben in Ihrer Frage gebeten, Lösungen zu vermeiden, die neben Posix weitere Bibliotheken verwenden. Während text-icu leicht von Hackage ( cabal install text-icu ) installiert werden kann, hängt es von der ICU C-Bibliothek ab, die nicht überall verfügbar ist. Darüber hinaus gibt es keine Posix-Alternative, die so robust oder umfassend ist. Schließlich ist text-icu das einzige Paket, das Konvertierungen für Zeichen mit mehreren Zeichen korrekt durchführt.

Vor diesem Hintergrund liefern die eingebauten Char- und String-Typen in Haskell Data.Char , deren Werte Unicode darstellen, und mit Funktionen, die führt eine Unicode-Fallkonvertierung durch , und zwar unter Verwendung der die Funktionen wchar_t , die von der offenen Gruppe definiert wurden. Außerdem können wir IO auf Handles in (Text-) Gebietsschema-sensitiver Weise ausführen.

%Vor%

Tatsächlich verwendet GHC Ihr Textgebietsschema standardmäßig für IO (z. B. UTF8). Für viele Probleme wird dies wahrscheinlich die richtige Antwort geben. Sie müssen sich nur darüber im Klaren sein, dass es auch in vielen Fällen falsch ist, da es nicht möglich ist, ohne Massenverarbeitung von Text und umfangreicher Konvertierung und Vergleichsunterstützung korrekt zu sein.

%Vor%
Don Stewart 15.05.2011, 22:38
quelle