Eliminazione di caratteri che corrispondono a un pattern

Haskell:
Eliminazione di caratteri che corrispondono a un pattern

How to:

Haskell non ha una standard library per regex come altri linguaggi, ma possiamo usare funzioni come filter e list comprehension per ottenere risultati simili.

import Data.Char (isDigit)

-- Rimuove tutti i numeri da una stringa
rimuoviNumeri :: String -> String
rimuoviNumeri = filter (not . isDigit)

-- Esempio d'uso
main :: IO ()
main = putStrLn $ rimuoviNumeri "H4sk3ll è f4nt4st1c0!"

-- Output: "Hskll è fntstc!"

Con list comprehension:

-- Rimuove i caratteri in 'charsToRemove' dalla stringa 's'
rimuoviPattern :: String -> String -> String
rimuoviPattern charsToRemove s = [c | c <- s, not (c `elem` charsToRemove)]

main :: IO ()
main = putStrLn $ rimuoviPattern "4" "H4sk3ll è f4nt4st1c0!"

-- Output: "Hsk3ll è fntstc0!"

Deep Dive

In Haskell, la manipolazione di stringhe è spesso meno diretta rispetto ad altri linguaggi imperativi. Haskell incoraggia un approccio funzionale e, pertanto, operazioni come rimuovere caratteri da una stringa tendono a essere espresse come trasformazioni di liste.

La storia di Haskell non vede un ruolo principale per le regex, dato che il linguaggio stesso offre potenti astrazioni per manipolare collezioni di dati, come le liste. Tuttavia, esistono librerie di terze parti come regex-tdfa e regex-posix che offrono funzionalità di espressioni regolari.

Un’alternativa funzionale è l’uso di funzioni combinatorie e pattern matching per definire pattern più complessi. Ad esempio, Data.List fornisce funzioni come delete e \\ per eliminare specifici elementi o intere sotto-liste.

See Also