Supón que quieres todos los enteros no negativos hasta 1000. Sería ridículo si tuvieras 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 teclear, sino también como tipos de retorno de funciones.
Ten en cuenta que los rangos no son vectores. Son solo 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
El tamaño del paso se puede especificar, 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 a stop - start, el último elemento evitará exceder stop.
Las secuencias no numéricas también se pueden usar en rangos. El ejemplo más simple 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 cubrirá con más detalle en otro concepto.
Por ahora, solo trátalos 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í, es probable que ya haya muchas implementaciones de ajedrez disponibles en línea, pero ¡la tuya será única!
Pero antes de que puedas dar rienda suelta a tu imaginación, tienes que ocuparte de lo básico. Empecemos por generar el tablero.
Cada casilla del tablero de ajedrez se identifica con un par de letra y número. Las columnas verticales de casillas, llamadas files, se etiquetan de la A a la H. Las filas horizontales de casillas, llamadas ranks, 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.