Введение
В этом лабораторном задании мы исследуем высших порядковых функций (HOF) в Rust, которые принимают одну или несколько функций и/или возвращают более полезную функцию, и рассмотрим, как их можно комбинировать с ленивыми итераторами, чтобы придать Rust функциональный стиль.
Примечание: Если в лабораторном задании не указано имя файла, вы можете использовать любое имя, которое хотите. Например, вы можете использовать
main.rs, скомпилировать и запустить его с помощьюrustc main.rs &&./main.
Высшие порядковые функции
Rust предоставляет Высшие порядковые функции (HOF). Это функции, которые принимают одну или несколько функций и/или возвращают более полезную функцию. HOF и ленивые итераторы придают Rust функциональный стиль.
fn is_odd(n: u32) -> bool {
n % 2 == 1
}
fn main() {
println!("Найти сумму всех квадратов нечетных чисел меньше 1000");
let upper = 1000;
// Императивный подход
// Объявить переменную накапливающего значения
let mut acc = 0;
// Итерировать: 0, 1, 2,... до бесконечности
for n in 0.. {
// Возвести число в квадрат
let n_squared = n * n;
if n_squared >= upper {
// Прервать цикл, если превышено верхнее ограничение
break;
} else if is_odd(n_squared) {
// Накапливать значение, если оно нечетное
acc += n_squared;
}
}
println!("императивный стиль: {}", acc);
// Функциональный подход
let sum_of_squared_odd_numbers: u32 =
(0..).map(|n| n * n) // Все натуральные числа, возведенные в квадрат
.take_while(|&n_squared| n_squared < upper) // Ниже верхнего предела
.filter(|&n_squared| is_odd(n_squared)) // Те, которые нечетные
.sum(); // Суммировать их
println!("функциональный стиль: {}", sum_of_squared_odd_numbers);
}
Option и Iterator реализуют свою долю HOF.
Резюме
Поздравляем! Вы завершили лабораторную работу по высшим порядковым функциям. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.