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

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

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

Вступ

Тип char у F# є 16-бітним значенням, що представляє найменші адресовані компоненти тексту; він типово незмінний.

char можна визначити як літерали в одинарних лапках:

let ch = 'A'
// => val ch: char = 'A'

Рядки тексту (англ. string) є послідовністю символів.

Окремий char можна отримати з рядка тексту за допомогою індексації (з відліком від нуля):

"Exercism"[4] //  =>  'c'

Перебирання рядка тексту повертає char на кожному кроці.

У наступному прикладі для зручності використано функцію вищого порядку та анонімну функцію. Їх належно розглянемо пізніше в силабусі, але поки що це, по суті, стислий спосіб записати цикл по символах рядка тексту.

Seq.map (fun c -> c, int c) "F#"  //  =>  [('F', 70); ('#', 35)]

Як показано вище, char можна привести до його значення int. Це також працює (принаймні іноді) для інших систем письма:

Seq.map (fun c -> c, int c) "東京"  //  =>  [('東', 26481); ('京', 20140)]

Для порівняння символів використовується базовий тип Int16:

'A' < 'D'  // =>  true

Також int можна привести до char:

char 77  // => 'M'

Бібліотека System.Char містить повний набір методів, очікуваних для мови .NET, як-от перетворення на верхній/нижній регістр:

'a' |> System.Char.ToUpper  // =>  'A'

'Q' |> System.Char.ToLower  // =>  'q'

Вказівки

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

У 6 завданнях ми поступово побудуємо функції transform для перетворення окремих символів і clean для перетворення рядків тексту (англ. string).

Допустимий ідентифікатор складається з нуля або більше літер, символів підкреслення, дефісів, знаків питання та емодзі.

Якщо до функції clean передати порожній рядок тексту, вона повинна повернути порожній рядок тексту.

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

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

transform '-'  // => "_"

2. Приберіть усі пробільні символи

Приберіть усі пробільні символи. Сюди входять також пробільні символи на початку й у кінці.

transform ' '  // => ""

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

Змініть функцію transform, щоб вона перетворювала camelCase на kebab-case

transform 'D'  // => "-d"

4. Пропустіть символи, які є цифрами

Змініть функцію transform, щоб вона пропускала всі символи, які є цифрами.

transform '7'  // => ""

5. Замініть грецькі малі літери на знаки питання

Змініть функцію transform, щоб вона замінювала всі грецькі літери в діапазоні від 'α' до 'ω'.

transform 'β' // => "?"

6. Поєднайте ці операції, щоб працювати з рядком тексту

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

Символи, які не підпадають під ці правила, повинні залишатися без змін.

clean "  a2b Cd-ω😀  " //  => "ab-cd_?😀"

Як зібрати рядок тексту з символів

Цю тему ми докладно розглянемо далі в силабусі.

Наразі може бути корисно знати, що існує функція вищого порядку під назвою String.collect, яка перетворює колекцію char на рядок тексту за допомогою функції, яку ми надаємо.

let transform ch = $"{ch}_"
String.collect transform "abc"  // =>  "a_b_c_"
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
F# Exercism

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

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