range
Una secuencia perezosa de enteros desde el inicio (incluido) hasta el final (excluido), con el paso que quieras.
Lección
range genera enteros bajo demanda, usando un generador
sync*: no se reserva nada por adelantado. Llamado con un solo
argumento, range(4) cuenta 0, 1, 2, 3 (es decir,
desde 0 hasta start, sin incluirlo). Con dos,
range(1, 4) cuenta 1, 2, 3. Un tercer argumento
fija el paso, incluido un paso negativo para contar hacia atrás:
por ejemplo, range(4, 1, -1) da 4, 3, 2.
Como es perezoso, crear range(1000000) resulta prácticamente
gratis: el millón de enteros solo se produce cuando algo aguas abajo
(normalmente .take(n)) tira realmente de ellos. Eso convierte
a range en la fuente de referencia para demostrar la
evaluación perezosa, y en un sustituto muy práctico siempre que necesites
«las primeras N cosas» sin construir antes una colección real.
A diferencia del range de FxTS, que es un generador finito
sobre números, este port mantiene el mismo contrato finito: aquí no hay una
forma ilimitada o infinita (de eso se encarga cycle). Si
quieres un contador sin fin, combina range con
cycle y take.
Demo 1 · Contar hacia arriba, hacia abajo y con pasos
Demo 2 · La pereza dentro de una cadena
range(1000000) no produce nada por adelantado: solo los 4
elementos que pide take(4) pasan realmente por
map:
Pruébalo tú
Ejercicio: construye los números pares del 2 al 10 incluido usando
el argumento de paso de range.