Curso de Raku / Programación funcional, concurrente, reactiva y web / Programación funcional / Secuencias perezosas e infinitas
Secuencias infinitas
Sustituye el valor final por un * y la secuencia se
vuelve infinita: no tiene último elemento. Como la
lista es perezosa, esto es perfectamente seguro: no se calcula nada
hasta que lo tomas.
say (1, 2, 4 ... *).head(5); # (1 2 4 8 16)La serie de potencias de dos sigue para siempre, pero
.head(5) extrae solo las cinco primeras. El rango
1..* es la secuencia infinita más sencilla: todos los
enteros a partir de uno.
say (1..*).head(3); # (1 2 3)
say (1..*).map(* ** 2).head(4); # (1 4 9 16)Incluso puedes definir una secuencia en términos de sus propios elementos anteriores. La sucesión de Fibonacci, en la que cada número es la suma de los dos anteriores, es célebremente una sola línea:
my @fib = 1, 1, * + * ... *;
say @fib[^10]; # (1 1 2 3 5 8 13 21 34 55)La clausura * + * toma los dos elementos anteriores y
los suma. Guardar la secuencia en @fib no da problema aquí
porque el operador ... la marca como perezosa, así que el
array no intenta calcularla entera: solo se producen los diez elementos
que pide @fib[^10].
La regla práctica: una secuencia infinita es segura mientras solo extraigas de ella una porción finita.
Práctica
Resuelve 1 cuestionario sobre el contenido de este tema.
Navegación del curso
← Quiz — El operador de secuencia | Quiz — Secuencias perezosas →
💪 O ve directamente a
los ejercicios de esta sección.