Gibt es eine Standardmethode zum Teilen einer Zeichenfolge in Haskell?
lines
und words
funktionieren gut, wenn Sie ein Leerzeichen oder eine neue Zeile teilen, aber es gibt sicherlich eine Standardmethode, um ein Komma zu teilen?
Ich konnte es bei Hoogle nicht finden.
Um genau zu sein, suche ich etwas, wo split "," "my,comma,separated,list"
zurückkehrt ["my","comma","separated","list"]
.
Data.List
oder sogarPrelude
. Es ist so üblich und böse, wenn es nicht für Code-Golf verfügbar ist.Antworten:
Hierfür gibt es ein Paket namens split .
Verwenden Sie es so:
Es verfügt über viele andere Funktionen zum Aufteilen auf übereinstimmende Trennzeichen oder auf mehrere Trennzeichen.
quelle
split
Funktion zu haben , die alle Anforderungen erfüllt. Sie benötigen wirklich ein solches Paket.split
derbuild-depends
Liste in Ihrer Kabalendatei hinzu, z. B. wenn Ihr Projekt Hallo heißt, und fügen Sie in diehello.cabal
Datei unter derexecutable hello
Zeile eine Zeile wie "Build-Dependent: Base, Split" ein (beachten Sie zwei Leerzeichen). Erstellen Sie dann mit demcabal build
Befehl. Vgl. haskell.org/cabal/users-guide/…Denken Sie daran, dass Sie die Definition der Prelude-Funktionen nachschlagen können!
http://www.haskell.org/onlinereport/standard-prelude.html
Wenn man dort schaut, ist die Definition von
words
,Ändern Sie es also für eine Funktion, die ein Prädikat akzeptiert:
Dann nenne es mit einem beliebigen Prädikat!
quelle
Wenn Sie Data.Text verwenden, gibt es splitOn:
http://hackage.haskell.org/packages/archive/text/0.11.2.0/doc/html/Data-Text.html#v:splitOn
Dies ist in der Haskell-Plattform integriert.
Also zum Beispiel:
oder:
quelle
text
Paket oder installieren es. Würde aber in eine andere Frage gehören.Im Modul Text.Regex (Teil der Haskell-Plattform) gibt es eine Funktion:
Hiermit wird eine Zeichenfolge basierend auf einem regulären Ausdruck aufgeteilt. Die API finden Sie bei Hackage .
quelle
Could not find module ‘Text.Regex’ Perhaps you meant Text.Read (from base-4.10.1.0)
Verwenden Sie
Data.List.Split
, die verwendetsplit
:quelle
Probier diese:
Funktioniert nur für ein einzelnes Zeichen, sollte aber leicht erweiterbar sein.
quelle
Ohne etwas zu importieren, das ein Zeichen direkt durch ein Zeichen ersetzt, ist das Zieltrennzeichen für
words
ein Leerzeichen. Etwas wie:oder
Sie können dies zu einer Funktion mit Parametern machen. Sie können den Parameter Zeichen entfernen, der mit meinen übereinstimmenden vielen übereinstimmt, wie in:
quelle
Z.B
Ein einzelnes nachfolgendes Trennzeichen wird entfernt:
quelle
Ich habe gestern angefangen, Haskell zu lernen, also korrigiere mich, wenn ich falsch liege, aber:
gibt:
oder vielleicht wolltest du
welches sein würde:
quelle
split
System, das von Sprachen mit gut entwickelten Bibliotheken verwöhnt wurde. Danke trotzdem.Ich weiß nicht , wie ein Kommentar auf Steves Antwort hinzufügen, aber ich möchte den empfehlen
GHC Bibliotheken Dokumentation ,
und dort speziell die
Sublist Funktionen in Data.List
Was als Referenz viel besser ist, als nur den einfachen Haskell-Bericht zu lesen.
Im Allgemeinen sollte eine Falte mit der Regel, wann eine neue Unterliste für den Feed erstellt werden soll, diese ebenfalls lösen.
quelle
Zusätzlich zu den effizienten und vorgefertigten Funktionen, die in den Antworten angegeben sind, füge ich meine eigenen hinzu, die einfach Teil meines Repertoires an Haskell-Funktionen sind, die ich geschrieben habe, um die Sprache in meiner Freizeit zu lernen:
Die Lösungen sind mindestens rekursiv, sodass kein Stapelüberlauf auftritt.
quelle
Beispiel im ghci:
quelle
ghci
?Ich finde das einfacher zu verstehen:
quelle