Символи та рядки тексту (англ. string) формують основу для представлення тексту в Elm.
Рядок тексту можна уявити як список символів, і більшість функцій з модуля List мають свій відповідник у модулі String.
Тип Char представляє один символ Unicode, узятий в одинарні лапки, наприклад 'a'.
Модуль Char надає функції-предикати (Char -> Bool) для перевірки властивостей символу: isUpper, isLower, isAlpha та isAlphaNum
Модуль також надає функції для перетворення символу: toUpper, toLower, toLocaleUpper, toLocaleLower, а також для переходу до його числового значення Unicode (Int) і назад за допомогою toCode та fromCode.
Тип String має вбудоване представлення для ефективної роботи з рядками тексту й може представляти будь-яку послідовність символів Unicode, наприклад "this is an Elm string."
Багаторядкові рядки тексту записуються трьома подвійними лапками та можуть містити неекрановані лапки й символи нового рядка.
"""
This is a multiline string.
All line-breaks and whitespace,
are preserved.
"""
Модуль String містить усі функції, зведені в таблиці нижче.
Ось деякі з найуживаніших функцій:
cons : Char -> String -> String додає символ на початок рядка тексту.
cons 'T' "he truth is out there"
--> "The truth is out there"
(++): String -> String -> String приєднує два рядки тексту.
"butter" ++ "fly"
--> "butterfly"
split : String -> String -> List String розбиває рядок тексту на список рядків за заданим роздільником.
split ";" "cat;dog;cow"
--> ["cat", "dog", "cow"]
join : String -> List String -> String зʼєднує список рядків тексту в один, використовуючи заданий роздільник.
join "a" ["H", "w", "ii", "n"]
--> "Hawaiian"
replace : String -> String -> String -> String замінює всі входження заданого підрядка.
replace "Hello" "Goodbye cruel" "Hello world."
--> "Goodbye cruel world."
length : String -> Int повертає кількість символів у рядку тексту.
length "Hello world."
--> 12
toInt : String -> Maybe Int намагається перетворити рядок тексту на Just Int і повертає Nothing для неправильно відформатованих рядків.
toInt "-42"
--> Just -42
contains : String -> String -> Bool перевіряє, чи містить другий рядок тексту перший.
contains "the" "theory"
--> True
map : (Char -> Char) -> String -> String застосовує задану функцію до кожного Char у рядку тексту.
Зауважмо, що надана функція має відображати Char у Char.
map (\c -> if c == '/' then '.' else c) "a/b/c"
--> "a.b.c"
| Зміна | Підрядки | Перевірка | Перетворення | Вищого порядку |
|---|---|---|---|---|
reverse |
slice |
length |
toInt |
map |
repeat |
left |
isEmpty |
fromInt |
filter |
replace |
right |
contains |
toFloat |
foldl |
append |
dropLeft |
startsWith |
fromFloat |
foldr |
concat |
dropRight |
indexes |
toList |
any |
split |
fromList |
all |
||
join |
fromChar |
|||
words |
||||
lines |
||||
cons |
||||
uncons |
У цій вправі ми реалізуємо частину набору допоміжних функцій, які допоможуть розробнику очистити назви ідентифікаторів.
У цих 5 завданнях ми будемо поступово будувати функцію clean.
Дійсний ідентифікатор складається з нуля або більше літер і символів підкреслення.
Якщо у функцію clean передати порожній рядок тексту (англ. string), вона має повернути порожній рядок тексту.
Реалізуйте функцію clean1, щоб замінити всі пробіли на символи підкреслення. Це стосується також пробілів на початку і в кінці.
clean1 "my Id"
--> "my___Id"
"[CTRL]" у верхньому регістріРеалізуйте clean2, щоб вона робила все, що й попередня функція, і замінювала поширені керуючі символи (\n, \t і \r) на рядок тексту "[CTRL]".
clean2 "my\nId"
--> "my[CTRL]Id",
Реалізуйте clean3, щоб вона робила все, що й попередня функція, і перетворювала kebab-case на camelCase.
clean3 "à-ḃç"
--> "àḂç"
Реалізуйте clean4, щоб вона робила все, що й попередня функція, і вилучала всі цифри.
clean4 "123"
--> ""
Нарешті, реалізуйте clean, щоб вона робила все, що й попередня функція, і вилучала будь-які грецькі літери в діапазоні від 'α' до 'ω'.
clean "My Οβιεγτ Finder"
--> "My_Ο_Finder"
Зареєструйтеся на Exercism, щоб вивчати й опановувати Elm, а також 28 концепцій110 вправ та справжнє наставництво від людей, і все це безкоштовно.