Cursus Raku / Geavanceerd / Besturingsstructuren / gather en
take / Exercises / Verzamelen tot
vol
Oplossing: Verzamelen tot vol
Hier is een mogelijke oplossing voor de opgave.
Code
my $sum = 0;
my @result = gather for 1..100 {
$sum += $_;
last if $sum > 10;
take $_;
}
say @result;🦋 Je kunt de broncode vinden in het bestand gather-big.raku.
Uitvoer
[1 2 3 4]Opmerkingen
De lus krijgt een bereik van honderd getallen, veel meer dan hij zal gebruiken. Dat is geen probleem, want de lus stopt zichzelf: zodra
$sumboven10komt, breektlastde lus af en worden de overige getallen nooit bezocht.De volgorde binnen het blok is belangrijk. We tellen eerst op bij
$sumen controleren de limiet voordat we nemen, dus het getal dat het totaal boven10brengt (hier5) wordt niet verzameld. Het lopend totaal bereikt precies10na4, dus de verzamelde lijst is1, 2, 3, 4.Dit vroegtijdig stoppen met
foris watgather/takekan engrepniet:grepdoorloopt altijd de hele lijst, terwijl we hier kiezen wanneer we stoppen.