Курс 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 тест за змістом цієї теми.

Навігація курсом

Метаоператори   |   Тест — Редукція


💪 Або перейдіть одразу до вправ цього розділу.