Курс по Raku / Напреднали / Управление на потока / gather и
take / Exercises / Повторете
всяко число
Решение: Повторете всяко число
Ето едно възможно решение на задачата.
Код
my @result = gather for 1..4 -> $n {
take $n for 1..$n;
};
say @result;🦋 Можете да намерите изходния код във файла collect-the-evens.raku.
Изход
[1 2 2 3 3 3 4 4 4 4]Коментари
Нищо не налага само едно
takeна итерация. Тук вътрешнотоtake $n for 1..$nизпълняваtakeразличен брой пъти при всяко преминаване, което е точно гъвкавостта, която правиgather/takeпо-мощно от обикновенmap.Външният цикъл използва именувана променлива
-> $nнарочно. Ако бяхме написали вътрешния цикъл с$_, вътрешниятforщеше да привърже$_към собствения си брояч и щяхме да вземаме брояча вместо текущото число.gatherпросто събира всяка стойност, която е била взета, по ред, така че@resultнакрая съдържа1, после две2, после три3, после четири4.