Y a-t-il quelque chose que je peux fournir un délimiteur à mots code> et des mots code> dans HASKELLL, pour le rendre similaire à Split et rejoindre Python? P>
3 Réponses :
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
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 code> et que la jointure multi-caractères est déjà là aussi bien que la jointure à un seul caractère était.
Voir aussi Intercalate CODE> pour un délimiteur multi-caractères au lieu de intersperse code>.
Votre pythonicsplit code> 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 code>
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)
Veuillez également consulter le paquet génial Split em>. Il fournit un module data.list.split code> pour toute sorte de fractionnement. p>
texte a rejoindre < / code>. p>