Треки
/
Gleam
Gleam
/
Вправи
/
Секрети
Секрети

Секрети

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

Вступ

Анонімні функції

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

На іменовану функцію, визначену в модулі, можна посилатися за її назвою.

pub fn main() {
  // Assign the function to a variable
  let f = add_one
  
  // Invoke the function
  f(1) // -> 2
  f(2) // -> 3
}

fn add_one(x) {
  x + 1
}

Також у Gleam є анонімні функції, які визначають усередині інших функцій.

// Define the function
let f = fn(x) { x + 1 }

// Invoke the function
f(1) // -> 2
f(2) // -> 3

Тип функції записують за синтаксисом, схожим на синтаксис анонімних функцій. Тип функції, яка приймає Int і Float та повертає Int, записують так:

fn(Int, Float) -> Int

Анонімні функції можуть посилатися на змінні, які були в області видимості на момент їх визначення, і тому вони є замиканнями.

let secret_number = 42

// This function always returns 42
fn() { secret_number }

Синтаксис захоплення функції дає зручний скорочений запис для створення анонімних функцій, які передають єдиний аргумент у функцію. Ці два вирази рівнозначні:

// Anonymous function syntax
let f = fn(x) { my_function(1, 2, x) }

// Function capture syntax
let f = my_function(1, 2, _)

Вказівки

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

Для кожного завдання поверніть анонімну функцію, яку можна викликати з області видимості виклику.

1. Створіть функцію додавання

Реалізуйте secret_add. Вона повинна повертати функцію, яка приймає один аргумент і додає до нього аргумент, переданий у secret_add.

let adder = secret_add(2)
adder(2)
// -> 4

2. Створіть функцію віднімання

Реалізуйте secret_subtract. Вона повинна повертати функцію, яка приймає один аргумент і віднімає від нього секрет, переданий у secret_subtract.

let subtractor = secret_subtract(2)
subtractor(3)
// -> 1

3. Створіть функцію множення

Реалізуйте secret_multiply. Вона повинна повертати функцію, яка приймає один аргумент і множить його на секрет, переданий у secret_multiply.

let multiplier = secret_multiply(7)
multiplier(3)
// -> 21

4. Створіть функцію ділення

Реалізуйте secret_divide. Вона повинна повертати функцію, яка приймає один аргумент і ділить його на секрет, переданий у secret_divide.

let divider = secret_divide(3)
divider(32)
// -> 10

5. Створіть комбінатор функцій

Реалізуйте secret_combine. Вона повинна повертати функцію, яка приймає один аргумент і послідовно застосовує до нього дві функції, передані в secret_combine.

let multiply = secret_multiply(7)
let divide = secret_divide(3)
let combined = secret_combine(multiply, divide)

combined(6)
// -> 14
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Gleam Exercism

Час розпочати Секрети?

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