Видалення символів за візерунком

Haskell:
Видалення символів за візерунком

How to: | Як зробити:

import Data.List (delete)

-- Видалення конкретного символу
removeChar :: Char -> String -> String
removeChar _ ""     = ""
removeChar c (x:xs) 
  | c == x    = removeChar c xs
  | otherwise = x : removeChar c xs

-- Використання функції
main :: IO ()
main = do
  let result = removeChar 'a' "banana"
  putStrLn result

Output:

bnn

Нащадок на Data.List, тепер видалимо список символів:

import Data.List (delete)

-- Видалення множини символів
removeChars :: [Char] -> String -> String
removeChars [] str = str
removeChars (c:cs) str = removeChars cs (removeChar c str)

-- Де removeChar визначено як раніше

-- Використання функції
main :: IO ()
main = do
  let result = removeChars "aeiou" "banana"
  putStrLn result

Output:

bnn

Deep Dive | Поглиблений Аналіз:

У Haskell видалення символів за шаблоном не має вбудованої функції, як у деяких інших мовах. Замість цього пишемо свої функції, як removeChar та removeChars. Функціональна природа Haskell заохочує до складання менших функцій у більш складні. removeChar і removeChars використовують рекурсію – типовий підхід у Haskell для ітерації.

Альтернативи включають використання регулярних виразів з бібліотекою regex або вбудовані функції високого рівня, як filter (дія протилежна до видалення). Видалення за шаблном можна реалізувати і з більшою ефективністю, наприклад, використовуючи структури даних, оптимізовані для цього завдання, як перетворювачі рядків (string transformers).

See Also | Дивіться Також:

  • Haskell.org Book – глибоке занурення у мову Haskell.
  • Learn You a Haskell for Great Good! – доступний ресурс для вивчення Haskell.
  • Hoogle – пошукова система для Haskell бібліотек.
  • Stack Overflow – спільнота з відповідями на питання з програмування на Haskell.