Курс языка программирования 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.

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

Повторение каждого числа   |   Квадраты