Raku-Kurs / Fortgeschritten / Kontrollfluss / gather und
take / Exercises / Sammeln bis
voll
Lösung: Sammeln bis voll
Hier ist eine mögliche Lösung der Aufgabe.
Code
my $sum = 0;
my @result = gather for 1..100 {
$sum += $_;
last if $sum > 10;
take $_;
}
say @result;🦋 Du findest den Quellcode in der Datei gather-big.raku.
Ausgabe
[1 2 3 4]Kommentare
Die Schleife bekommt einen Bereich von hundert Zahlen, weit mehr als sie verwenden wird. Das ist kein Problem, weil die Schleife sich selbst stoppt: Sobald
$sumden Wert10überschreitet, brichtlastab und die verbleibenden Zahlen werden nie besucht.Die Reihenfolge innerhalb des Blocks ist wichtig. Wir addieren zuerst zu
$sumund prüfen das Limit, bevor wir nehmen, sodass die Zahl, die die Summe über10kippt (hier5), nicht gesammelt wird. Die laufende Summe erreicht genau10nach4, sodass die gesammelte Liste1, 2, 3, 4ist.Dieses vorzeitige Beenden mit
forist das, wasgather/takekann undgrepnicht:grepdurchsucht immer die gesamte Liste, während wir hier selbst entscheiden, wann wir aufhören.