Курс языка программирования Raku / Функциональное, конкурентное, реактивное и веб-программирование / Функциональное программирование / Свёртка

Метаоператор свёртки

Заключите любой инфиксный оператор в квадратные скобки, и он станет свёрткой: он вставляется между каждыми элементами списка, схлопывая список в одно значение.

say [+] 1, 2, 3, 4, 5; # 15
say [*] 1, 2, 3, 4, 5; # 120

[+] суммирует список, как если бы вы написали 1 + 2 + 3 + 4 + 5; [*] его перемножает. То же работает с любым инфиксным оператором:

say [max] 4, 9, 2, 7; # 9
say [min] 4, 9, 2, 7; # 2
say [~] 'a', 'b', 'c'; # abc

[max] сворачивает список оператором max, находя наибольший элемент, а [~] сворачивает оператором конкатенации строк ~, склеивая кусочки вместе.

Метаоператор свёртки работает с любым списком, в том числе с диапазоном:

say [+] 1..100; # 5050

Это одна из самых компактных и выразительных возможностей Raku: накопление на целый цикл — в одной паре скобок.

Практика

Пройдите 1 тест по содержанию этой темы.

Навигация по курсу

Свёртка   |   Тест — Метаоператор свёртки


💪 Или перейдите сразу к упражнениям этого раздела.