Курс языка программирования Raku / Продвинутый уровень / Операторы / Метаоператоры
Метаоператоры свёртки
Метаоператор свёртки записывается как обычный оператор, заключённый в
квадратные скобки, например [+] или [*]. Он
берёт список значений и вставляет оператор между каждой парой,
сворачивая весь список в одно значение.
Например, [+] складывает все элементы списка:
my @data = 3, 5, 7, 9, 11;
say [+] @data; # 35Конструкция [+] @data равносильна тому, чтобы выписать
оператор вручную:
say 3 + 5 + 7 + 9 + 11; # 35Точно так же работает любой подходящий инфиксный оператор. С
[*] вы получите произведение списка, поэтому применение его
к диапазону 1..$n — удобный способ вычислить факториал:
my $n = 5;
say [*] 1..$n; # 120Здесь диапазон 1..$n порождает числа от 1 до 5, а
[*] перемножает их: 1 * 2 * 3 * 4 * 5, то есть
5!.
Конкатенация строк тоже работает. Свёртка [~] соединяет
список строк в одну:
my @strings = <neun hundert fünf und zwanzig>;
say [~] @strings; # neunhundertfünfundzwanzigСвернуть можно даже операторы сравнения. [<]
сообщает, идут ли значения строго по возрастанию:
say [<] 1, 2, 3; # TrueТреугольная свёртка
Если поставить внутри скобок обратную косую черту, получится треугольная свёртка, которая сохраняет все промежуточные результаты, а не только итоговый:
say [\+] 1..5; # (1 3 6 10 15)Каждый элемент результата — это частичная сумма: 1,
затем 1+2, затем 1+2+3 и так далее вплоть до
суммы всего списка.
Практика
Пройдите 1 тест по содержанию этой темы.
Навигация по курсу
← Метаоператоры | Тест — Свёртка →
💪 Или перейдите сразу к упражнениям этого
раздела.