Треки
/
F#
F#
/
Вправи
/
Треки на треках на треках
Треки на треках на треках

Треки на треках на треках

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

Вступ

Масиви

list у F# - це незмінна колекція, що містить нуль або більше значень. Усі значення в масиві мають бути одного типу. Оскільки масиви незмінні, після створення масиву його значення вже ніколи не зміниться. Будь-які функції чи оператори, які нібито змінюють масив (наприклад, додають елемент), насправді повертають новий масив.

Масиви можна визначити так:

let empty = []
let singleValue = [5]
let threeValues = ["a"; "b"; "c"]

Найчастіше елемент додають до масиву за допомогою оператора :: (cons):

let twoToFour = [2; 3; 4]
let oneToFour = 1 :: twoToFour
// => [1; 2; 3; 4]

Масив у F# має голову (перший елемент) і хвіст (усе, що йде після першого елемента). Хвіст масиву - це теж масив.

Масиви можна обробляти або за допомогою функцій і операторів, визначених у модулі List, або вручну, за допомогою зіставлення зі зразком, використовуючи зразки list і cons:

let describe list =
    match list with
    | [] -> "Empty list"
    | head::tail -> sprintf "Non-empty list with head: %d" head

describe []        // => "Empty list"
describe [1]       // => "Non-empty with head: 1"
describe [5; 7; 9] // => "Non-empty with head: 5"

Ми також можемо відкинути значення під час зіставлення зі зразком; коли значення в конкретному випадку нам не важливе (тобто ми не збираємося його використовувати), можна позначити це символом підкреслення ('_'):

let describe list =
    match list with
    | [] -> "Empty list"
    | [x] -> "List with one item"
    | [_; y] -> "List with two items (first item ignored)"
    | _ -> "List with many items (all items ignored)"

describe []        // => "Empty list"
describe [1]       // => "List with one item"
describe [5; 7]     // => "List with two items (first item ignored)"
describe [5; 7; 9] // => "List with many items (all items ignored)"

Одиничний '_' завжди має стояти останнім у зіставленні зі зразком: кожне значення, яке не відповідає жодному з інших випадків, оброблятиметься цим випадком.

Вказівки

У цій вправі ми будемо писати код, щоб відстежувати масив мов програмування, які хочемо вивчати на Exercism.

На нас чекає шість завдань, і всі вони будуть повʼязані з масивами.

1. Створіть новий список

Щоб відстежувати мови, які ми хочемо вивчати, нам потрібно створити новий масив. Визначте привʼязку newList, що містить новий порожній масив.

newList
// => []

2. Визначте наявний список

Зараз у нас є аркуш паперу з переліком мов, які ми хочемо вивчати: F#, Clojure і Haskell. Визначте привʼязку existingList, щоб представити цей масив.

existingList
// => ["F#"; "Clojure"; "Haskell"]

3. Додайте нову мову до списку

Досліджуючи Exercism і знаходячи цікавіші мови, ми хочемо додавати їх до свого масиву. Реалізуйте функцію addLanguage, щоб додати нову мову на початок масиву.

addLanguage "TypeScript" ["JavaScript"; "CoffeeScript"]
// => ["TypeScript"; "JavaScript"; "CoffeeScript"]

4. Порахуйте мови у списку

Порахувати мови по одній незручно. Реалізуйте функцію countLanguages, щоб порахувати кількість мов у масиві.

countLanguages ["C#"; "Racket"; "Rust"; "Ruby"]
// => 4

5. Переверніть список

У якийсь момент ми розуміємо, що наш масив насправді впорядковано у зворотному порядку! Реалізуйте функцію reverseList, щоб перевернути масив.

reverseList ["Prolog"; "C"; "Idris"; "Assembly"]
// => ["Assembly"; "Idris"; "C"; "Prolog"]

6. Перевірте, чи список захопливий

Хоча ми любимо всі мови, F# посідає особливе місце в нашому серці. Тож масив мов викликає в нас справжнє захоплення, якщо:

  • Перший елемент масиву - F#.
  • Другий елемент масиву - F#, і масив містить або дві, або три мови.

Реалізуйте функцію excitingList, щоб перевірити, чи масив мов захопливий:

excitingList ["Nim"; "F#"]
// => true
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
F# Exercism

Час розпочати Треки на треках на треках?

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