Haskell:
Usuwanie cudzysłowów z ciągu znaków
Jak to zrobić:
W Haskellu możemy stworzyć funkcję, która usunie wszystkie cudzysłowy z danego ciągu znaków. To jakby powiedzieć cudzysłowom, żeby spadły, i upewnić się, że zrozumieli aluzję.
import Data.List (intercalate)
import Data.Char (isPunctuation)
removeQuotes :: String -> String
removeQuotes = filter (\c -> c /= '"' && c /= '\'')
main :: IO ()
main = do
let stringWithQuotes = "Haskell powiedział, \"Nauczmy się kilku funkcji!\""
putStrLn $ removeQuotes stringWithQuotes
Przykładowe wyjście:
Haskell powiedział, Nauczmy się kilku funkcji!
Dogłębniej
Dawno, dawno temu, zanim ciągi znaków w programowaniu stały się równie powszechne jak filmy z kotami w internecie, manipulacja tekstem była karkołomnym zajęciem. Ale wraz z ewolucją języków programowania, ciągi znaków stały się kluczową częścią kodowania. Jednakże, cudzysłowy pozostały mieczem obosiecznym—niezbędne do definiowania ciągów, ale uciążliwe, gdy są zawarte jako rzeczywiste dane.
Alternatywy? Zamiast odpędzać wszystkie cudzysłowy jak muchy, możesz być bardziej selektywny. Możesz chcieć usunąć tylko najbardziej zewnętrzne cudzysłowy (klasyczne przycięcie) lub obsłużyć cudzysłowy uciekające wewnątrz ciągu.
Jeśli chodzi o implementację, funkcja removeQuotes
wyżej używa lambdy do sprawdzenia każdego znaku (c
), aby zobaczyć, czy jest uciążliwym cudzysłowem i odpowiednio go filtrowania. To prostolinijne podejście, ale dla większych tekstów lub bardziej złożonych zasad, warto rozważyć biblioteki parserów takie jak Parsec
, które mogą dać więcej finezji i mocy w przetwarzaniu tekstu.
Zobacz również:
- Dla miłośników regex: Text.Regex.Posix
- Przyjazne wprowadzenie do ciągów znaków w Haskellu: Learn You a Haskell for Great Good! - Zacznijmy