Curso de Raku / Avanzado / Control de flujo / gather y
take / Exercises / Recolectar hasta
llenar
Solución: Recolectar hasta llenar
Aquí tienes una posible solución para la tarea.
Código
my $sum = 0;
my @result = gather for 1..100 {
$sum += $_;
last if $sum > 10;
take $_;
}
say @result;🦋 Encuentra el programa en el archivo gather-big.raku.
Salida
[1 2 3 4]Comentarios
Al bucle se le da un rango de cien números, muchos más de los que usará. Eso está bien porque el bucle se detiene solo: tan pronto como
$sumsupera10,lastsale y los números restantes nunca se visitan.El orden dentro del bloque importa. Primero sumamos a
$sumy verificamos el limite antes de tomar, así que el numero que hace que el total supere10(aquí,5) no se recopila. El total acumulado llega exactamente a10después de4, así que la lista recopilada es1, 2, 3, 4.Esta salida anticipada con
fores lo quegather/takepuede hacer ygrepno:grepsiempre recorre toda la lista, mientras que aquí elegimos cuando detenernos.