Курс по Raku / Напреднали / Управление на потока / gather и take / Exercises / Gather до запълване

Решение: Gather до запълване

Ето едно възможно решение на задачата.

Код

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 до запълване   |   Тест — gather