Curso de Raku / Avanzado / Más sobre los tipos integrados / Secuencias

Secuencias perezosas e infinitas

Una secuencia no tiene que calcular todos sus valores de una vez. Las secuencias en Raku son perezosas (lazy): cada valor se produce solo cuando realmente se necesita. Esto hace posible describir una secuencia que no tiene fin.

Para escribir una secuencia infinita, usa Inf como punto final. Envuelve la secuencia entre paréntesis, porque ... tiene menor precedencia que =:

my $naturals = (1 ... Inf);

Sin los paréntesis, my $naturals = 1 ... Inf asignaría solo 1 a la variable y luego construiría la secuencia por su cuenta, y evaluar una secuencia interminable sin resultado colgaría el programa.

Aún no se ha calculado nada. La secuencia entregará valores solo cuando los solicites. El método head toma los primeros:

say (1 ... Inf).head(5); # (1 2 3 4 5)

Aunque la secuencia es infinita, solo se generan los primeros cinco números. Sin la evaluación perezosa, un programa que intentará construir toda una secuencia interminable nunca terminaría.

Para una secuencia finita, el método tail toma valores del final:

say (1 ... 100).tail(3); # (98 99 100)

La evaluación perezosa es lo que te permite separar la descripción de una secuencia de la decisión de cuánto de ella usar.

Quiz — El operador ...   |   Números impares


💪 O ve directamente a los ejercicios de esta sección.