9
votes

Haskell: mots, délimitation

Y a-t-il quelque chose que je peux fournir un délimiteur à mots et des mots dans HASKELLL, pour le rendre similaire à Split et rejoindre Python?


0 commentaires

3 Réponses :


4
votes

Non, mais ce sont vraiment (versions optimisées des) applications de data.list.break code> et data.list.InterPerse code> , respectivement.

pythonicSplit      :: String -> Char -> [String]
pythonicSplit "" _ =  []
pythonicSplit s  c =  let (r,rs) = break (== c) s
                       in r : pythonicSplit rs c

pythonicJoin       :: [String] -> Char -> String
pythonicJoin  ss c =  intersperse c ss -- or: flip intersperse


5 commentaires

Je laisserai des versions qui se sont divisées sur une chaîne ou n'importe laquelle de plusieurs personnages comme exercices pour le lecteur, si seulement parce que c'est au-delà de mon coucher. :) Mais je vais noter que tous les outils dont vous avez besoin sont dans data.list et que la jointure multi-caractères est déjà là aussi bien que la jointure à un seul caractère était.


Voir aussi Intercalate pour un délimiteur multi-caractères au lieu de intersperse .


Votre pythonicsplit est incorrect. Après le premier mot, il génère une liste infinie de chaînes vides


Intersperse retourne une liste. Pour rejoindre une chaîne, essayez ceci: Joinon str l = plipl1 (\ ACC x -> ACC ++ STR ++ x) l


Ce qui suit renvoie une chaîne (vous n'avez pas besoin de Lamba pour appliquer ++, juste le curry-le): Pythonicjoin C SS = FLETL (++) "" (intersperse c SS)



10
votes

Veuillez également consulter le paquet génial Split . Il fournit un module data.list.split pour toute sorte de fractionnement.


0 commentaires

1
votes

texte a Spliton & Intercalate équivalent à la division de Python rejoindre < / code>.


0 commentaires