Курс по 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]

Коментари

  1. Нищо не налага само едно take на итерация. Тук вътрешното take $n for 1..$n изпълнява take различен брой пъти при всяко преминаване, което е точно гъвкавостта, която прави gather/take по-мощно от обикновен map.

  2. Външният цикъл използва именувана променлива -> $n нарочно. Ако бяхме написали вътрешния цикъл с $_, вътрешният for щеше да привърже $_ към собствения си брояч и щяхме да вземаме брояча вместо текущото число.

  3. gather просто събира всяка стойност, която е била взета, по ред, така че @result накрая съдържа 1, после две 2, после три 3, после четири 4.

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

Повторете всяко число   |   Квадрати