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
- Documentazione sulle espressioni regolari in Haskell: Hackage: regex-tdfa
- Libreria
Data.List
per manipolazione di liste: Hackage: Data.List