Треки
/
Elm
Elm
/
Вправи
/
Бездоганно чисто
Бездоганно чисто

Бездоганно чисто

Навчальна вправа

Вступ

Рядки тексту

Символи та рядки тексту (англ. 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), вона має повернути порожній рядок тексту.

1. Замініть пробіли на символи підкреслення

Реалізуйте функцію clean1, щоб замінити всі пробіли на символи підкреслення. Це стосується також пробілів на початку і в кінці.

clean1 "my   Id"
    --> "my___Id"

2. Замініть керуючі символи на рядок тексту "[CTRL]" у верхньому регістрі

Реалізуйте clean2, щоб вона робила все, що й попередня функція, і замінювала поширені керуючі символи (\n, \t і \r) на рядок тексту "[CTRL]".

clean2 "my\nId"
    --> "my[CTRL]Id",

3. Перетворіть kebab-case на camelCase

Реалізуйте clean3, щоб вона робила все, що й попередня функція, і перетворювала kebab-case на camelCase.

clean3 "à-ḃç"
    --> "àḂç"

4. Вилучіть цифри

Реалізуйте clean4, щоб вона робила все, що й попередня функція, і вилучала всі цифри.

clean4 "123"
    --> ""

5. Вилучіть грецькі літери в нижньому регістрі

Нарешті, реалізуйте clean, щоб вона робила все, що й попередня функція, і вилучала будь-які грецькі літери в діапазоні від 'α' до 'ω'.

clean "My Οβιεγτ Finder"
    --> "My_Ο_Finder"
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Elm Exercism

Час розпочати Бездоганно чисто?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Elm, а також 28 концепцій110 вправ та справжнє наставництво від людей, і все це безкоштовно.