Suponha que você queira todos os inteiros não negativos até 1000. Seria um absurdo se você tivesse que digitar tudo isso em um array.
Para isso temos o tipo range:
julia> 0:1000
0:1000
julia> typeof(0:1000)
UnitRange{Int64}
Ranges são muito comuns: não só para você não precisar digitar tudo, mas também como tipos de retorno de funções.
Repare que ranges não são vetores. Eles são apenas um conjunto de instruções para gerar uma sequência (avaliação "preguiçosa", ou um "iterador").
Se você precisar de um range como vetor, use a função collect() para converter:
julia> collect(0:5)
6-element Vector{Int64}:
0
1
2
3
4
5
O tamanho do passo pode ser especificado, neste caso 0.3:
julia> collect(1.0:0.3:2.0)
4-element Vector{Float64}:
1.0
1.3
1.6
1.9
Então a sintaxe é start:stepsize:stop.
Os dois limites são inclusivos, como no exemplo com inteiros.
Se o tamanho do passo não dividir stop - start de forma exata, o último elemento não vai ultrapassar stop.
Sequências não numéricas também podem ser usadas em ranges. O exemplo mais simples envolve 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)
O tipo Char será abordado com mais detalhes em outro conceito.
Por enquanto, basta tratá-los como caracteres únicos entre aspas simples.
Verifique os limites de um range com first() e last().
r = 1:10 # => 1:10
first(r) # => 1
last(r) # => 10
Ranges de inteiros e vetores podem ser usados na indexação de vetores:
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 entusiasta de xadrez, você gostaria de escrever sua própria versão do jogo. Sim, talvez já existam muitas implementações de xadrez disponíveis online, mas a sua será única!
Mas antes de soltar a imaginação, você precisa cuidar do básico. Vamos começar gerando o tabuleiro.
Cada casa do tabuleiro de xadrez é identificada por um par de letra e número. As colunas verticais de casas recebem as letras de A a H, e as fileiras horizontais de casas são numeradas de 1 a 8.
Implemente a função rank_range(). Ela deve retornar um intervalo de números inteiros, de 1 a 8.
julia> rank_range()
# output omitted
Implemente a função file_range().
Ela deve retornar um intervalo de caracteres, da letra maiúscula A até a letra maiúscula H.
julia> file_range()
# output omitted
Implemente a função ranks(). Ela deve retornar um vetor de números inteiros, de 1 a 8.
Não escreva o vetor à mão, gere-o a partir do intervalo retornado pela função rank_range().
julia> ranks()
[1, 2, 3, 4, 5, 6, 7, 8]
Implemente a função files. Ela deve retornar um vetor de caracteres, de 'A' a 'H'.
Não escreva o vetor à mão, gere-o a partir do intervalo retornado pela função file_range().
julia> files()
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
Crie sua conta no Exercism para aprender e dominar Julia com 35 conceitos128 exercícios e mentoria humana de verdade, tudo de graça.