Курс Raku / Розширені / Порядок виконання / gather та take / Вправи / Повторити кожне число

Розв’язання: Повторити кожне число

Ось один із можливих варіантів розв’язання задачі.

Код

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.

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

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