6
votes

Strip gauche / droite une chaîne (et chomp)

Je n'ai rien trouvé sur la façon de dépasser une chaîne (enlever les caractères de pointe / de fin) dans HASKELLL, et il n'y a pas de lieu de place pour trouver un tel bande ou Chomp (Corrigez-moi si je me trompe).

Qu'est-ce que je vais faire?


4 Réponses :


1
votes

Voici 3 fonctions et 3 fonctions planifiées courantes pour réussir:

stripL :: Char -> String -> String
stripL x = dropWhile (==x)

stripR :: Char -> String -> String
stripR x = reverse . stripL . reverse

strip :: Char -> String -> String
strip x = stripL x . stripR x

chompL :: String -> String
chompL = stripL ' '

chompR :: String -> String
chompR = stripR ' '

chomp :: String -> String
chomp = strip ' '


2 commentaires

stripr x = inverse. stripl. Inverser


De bonnes définitions, cependant, je dirais que si vous utilisez une chaîne, vous devriez essayer de traiter votre entrée linéairement et que vous ne savourez que des espaces blancheurs à l'avant, à l'aide d'Isspace baissé pour couvrir les onglets, etc., car un décapage à l'arrière d'une liste est inefficace. (Si vous vous dépendez et que vous avez obtenu [], vous êtes à la fin de votre contribution.) D'Ainsi, je n'utiliserais jamais Stripl et que vous trouviez de manière tombée plus facilement flexible. Cela peut être pourquoi ils ont été omis.



5
votes

Tout d'abord, vous devez utiliser texte (à partir du fichier ) au lieu de chaîne , puisque texte est beaucoup plus efficace.

aussi, texte a déjà cette fonction: xxx


0 commentaires

3
votes

L'approche plus générale consisterait à transmettre un prédicat aux fonctions bandes , donc on pourrait stripl isspace E.G. Pour enlever tous les grands espaces blancs.

alors stripl serait cependant simplement un alias pour drapeau .

pour le décapage de la fin, un version potentiellement plus efficace utilise pli "/ code>, xxx

capable de produire une sortie sans déplacer toute la liste d'entrée et est efficace s'il n'y a pas de longues épuilles d'éléments satisfaisant le prédicat de l'entrée.


0 commentaires

8
votes

regarder Data.text . Tout ce qui utilise des listes de prélude, tels que String S, fonctionne généralement mal, en particulier avec des fonctions telles que stripr . Certains considèrent comme une erreur du passé, car elle a infecté beaucoup d'interfaces (sinon sensibles) avec les inefficacités d'utilisation de listes de caractères individuellement liées ( string ) pour les données textuelles.

Les fonctions que vous recherchez sont, dans l'ordre: Dwwwwwhile , Dwwwwwileend , Drocaround , stripstart , stripend , bande .

Notez qu'il n'y a pas de fonction spécifique pour décapage en fonction de l'égalité des caractères. Vous ne gagnez pas vraiment d'aliasing dropx avec un prédicat, à moins que ce ne soit un très couramment utilisé comme data.char.isspace . < / p>


0 commentaires