Curso de Raku / Avanzado / Control de flujo / Prefijos de sentencia / Exercises / Forzar evaluación ansiosa
Solución: Forzar evaluación ansiosa
Aquí tienes una posible solución para la tarea.
Código
say (1 .. Inf).is-lazy;
say (eager 1..3).is-lazy;
say (lazy 1..3).is-lazy;🦋 Puedes encontrar el código fuente en el archivo force-eager.raku.
Salida
True
False
TrueComentarios
Un rango hasta
Infno puede calcularse todo de una vez, así que es perezoso:.is-lazyreportaTrue.El prefijo
eagerfuerza a que una lista se produzca inmediatamente, por lo que el resultado ya no es perezoso:.is-lazyreportaFalse. Este es el equivalente directo de marcar una lista comolazy.No apliques
eagera un rango sin límite:eager 1 .. Infintenta calcular todos los elementos de una vez, así que el programa simplemente se cuelga, consumiendo cada vez más memoria hasta que es terminado.eagersolo es seguro en listas que sabes que son finitas.Lo inverso también funciona:
lazy 1..3marca incluso un rango corto y finito como perezoso, así que.is-lazyreportaTrue. El prefijo establece la bandera de pereza sin importar cuán pequeña sea la lista: no tiene que ser infinita para ser perezosa.