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

Розв’язання: Збирати до заповнення

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

Код

my $sum = 0;
my @result = gather for 1..100 {
    $sum += $_;
    last if $sum > 10;
    take $_;
}

say @result;

🦋 Вихідний код можна знайти у файлі gather-big.raku.

Вивід

[1 2 3 4]

Коментарі

  1. Циклу дано діапазон зі ста чисел — набагато більше, ніж він використає. Це нормально, бо цикл зупиняє себе сам: щойно $sum переходить 10, last виривається назовні, і решта чисел так і не відвідується.

  2. Порядок усередині блоку має значення. Ми спершу додаємо до $sum і перевіряємо межу, а вже потім беремо, тож число, яке перехиляє суму за 10 (тут 5), не збирається. Накопичена сума досягає рівно 10 після 4, тож зібраний список — це 1, 2, 3, 4.

  3. Цей достроковий вихід із for — те, що вміє gather/take і не вміє grep: grep завжди переглядає весь список, а тут ми самі обираємо, коли зупинитися.

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

Збирати до заповнення   |   Тест — gather