Курс по 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 тест върху съдържанието на тази тема.
Навигация в курса
← Метаоператори | Тест — Редукция →
💪 Или преминете направо към упражненията в този
раздел.