Suppression de caractères correspondant à un motif

Haskell:
Suppression de caractères correspondant à un motif

How to: (Comment faire :)

import Data.List (delete)

-- Suppression simple
deleteChar :: Char -> String -> String
deleteChar _ "" = ""
deleteChar x xs = filter (/= x) xs

-- Utilisation de fonction 'deleteChar'
main :: IO ()
main = do
    let originalString = "Haskell est sympa!"
    let result = deleteChar 's' originalString
    putStrLn result  -- "Hakell et ympa!"

Un autre exemple en utilisant les expressions régulières pour plus de complexité :

import Text.Regex.Posix ((=~))

-- Suppression avec motifs (expressions régulières)
deletePattern :: String -> String -> String
deletePattern _ "" = ""
deletePattern pattern text = text =~ ("[^" ++ pattern ++ "]+")

-- Utilisation de 'deletePattern'
main :: IO ()
main = do
    let originalString = "Offrez 0102 fleurs à 301"
    let cleanedString = deletePattern "0-9" originalString
    putStrLn cleanedString  -- "Offrez  fleurs à "

Deep Dive (Plongée en Profondeur)

Historiquement, le traitement de chaînes de caractères a toujours été une part importante de la programmation. Dans Haskell, les chaînes sont des listes de caractères, donc la manipulation de chaîne s’appuie sur des fonctions puissantes pour les listes. En dehors de l’approche manuelle avec des fonctions comme filter, Haskell peut utiliser des bibliothèques comme Text.Regex.Posix pour les expressions régulières, ce qui offre un outil plus robuste pour des motifs complexes.

Alternativement, pour des buts plus spécifiques, on pourrait se tourner vers les parsers combinator library comme Parsec ou Attoparsec, qui fournissent une analyse approfondie et un contrôle des chaînes de caractères.

En termes de performance, Haskell est paresseux (lazy evaluation), ce qui signifie que les transformations de chaînes ne sont calculées que lorsque c’est absolument nécessaire. C’est utile pour les grandes données ou les streams.

See Also (Voir Aussi)