Supón que quieres todos los números enteros no negativos hasta 1000. Sería ridículo tener que escribirlos en un array.
Para esto tenemos el tipo range:
julia> 0:1000
0:1000
julia> typeof(0:1000)
UnitRange{Int64}
Los rangos son muy comunes: no solo para ahorrarte escritura, sino también como tipos devueltos por las funciones.
Ten en cuenta que los rangos no son vectores. No son más que un conjunto de instrucciones para generar una secuencia (evaluación «perezosa», o un «iterador»).
Si necesitas un rango como vector, usa la función collect() para convertirlo:
julia> collect(0:5)
6-element Vector{Int64}:
0
1
2
3
4
5
Se puede especificar el tamaño del paso, en este caso 0,3:
julia> collect(1.0:0.3:2.0)
4-element Vector{Float64}:
1.0
1.3
1.6
1.9
Así que la sintaxis es start:stepsize:stop.
Ambos límites son inclusivos, como se ve en el ejemplo con enteros.
Si el tamaño del paso no divide exactamente stop - start, el último elemento evitará superar stop.
En los rangos también se pueden usar secuencias no numéricas. El ejemplo más sencillo son las letras ASCII:
julia> 'a':'d'
'a':1:'d'
julia> typeof('a':'d')
StepRange{Char, Int64}
julia> collect('a':'d')
4-element Vector{Char}:
'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)
'b': ASCII/Unicode U+0062 (category Ll: Letter, lowercase)
'c': ASCII/Unicode U+0063 (category Ll: Letter, lowercase)
'd': ASCII/Unicode U+0064 (category Ll: Letter, lowercase)
El tipo Char se tratará con más detalle en otro concepto.
Por ahora, considéralos simplemente como caracteres individuales entre comillas simples.
Comprueba los límites de un rango con first() y last().
r = 1:10 # => 1:10
first(r) # => 1
last(r) # => 10
Los rangos de enteros y los vectores se pueden usar en la indexación de vectores:
nums = collect(10.0:50.0)
nums[3:2:7] # gives [12.0, 14.0, 16.0]
nums[ [3, 5, 7] ] # also gives [12.0, 14.0, 16.0]
Como aficionado al ajedrez, te gustaría escribir tu propia versión del juego. Sí, puede que ya haya un montón de implementaciones de ajedrez disponibles en internet, pero la tuya será única?
Pero antes de que puedas dejar volar tu imaginación, tienes que ocuparte de lo básico. Empecemos por generar el tablero.
Cada casilla del tablero de ajedrez se identifica por un par de letra y número. Las columnas verticales de casillas, llamadas columnas, se etiquetan de la A a la H. Las filas horizontales de casillas, llamadas filas, se numeran del 1 al 8.
Implementa la función rank_range(). Debe devolver un rango de números enteros, del 1 al 8.
julia> rank_range()
# output omitted
Implementa la función file_range().
Debe devolver un rango de caracteres, desde la letra A mayúscula hasta la letra H mayúscula.
julia> file_range()
# output omitted
Implementa la función ranks(). Debe devolver un vector de números enteros, del 1 al 8.
No escribas el vector a mano: genéralo a partir del rango que devuelve la función rank_range().
julia> ranks()
[1, 2, 3, 4, 5, 6, 7, 8]
Implementa la función files. Debe devolver un vector de caracteres, de 'A' a 'H'.
No escribas el vector a mano: genéralo a partir del rango que devuelve la función file_range().
julia> files()
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
Regístrate en Exercism para aprender y dominar Julia con 35 conceptos128 ejercicios y mentoría humana real, todo gratis.