Курс 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]Коментарі
Циклу дано діапазон зі ста чисел — набагато більше, ніж він використає. Це нормально, бо цикл зупиняє себе сам: щойно
$sumпереходить10,lastвиривається назовні, і решта чисел так і не відвідується.Порядок усередині блоку має значення. Ми спершу додаємо до
$sumі перевіряємо межу, а вже потім беремо, тож число, яке перехиляє суму за10(тут5), не збирається. Накопичена сума досягає рівно10після4, тож зібраний список — це1, 2, 3, 4.Цей достроковий вихід із
for— те, що вмієgather/takeі не вмієgrep:grepзавжди переглядає весь список, а тут ми самі обираємо, коли зупинитися.