Tegyük fel, hogy szükséged van az összes nemnegatív egész számra 1000-ig. Nevetséges lenne, ha ezeket egy tömbbe kellene begépelned.
Erre való a range típus:
julia> 0:1000
0:1000
julia> typeof(0:1000)
UnitRange{Int64}
A range-ek nagyon gyakoriak: nemcsak gépelést spórolnak meg, hanem függvények visszatérési típusaként is előfordulnak.
Figyeld meg, hogy a range-ek nem vektorok. Nem mások, mint utasítások halmaza egy sorozat előállításához („lusta” kiértékelés, vagy egy „iterátor”).
Ha a range-re vektorként van szükséged, a collect() függvénnyel alakíthatod át:
julia> collect(0:5)
6-element Vector{Int64}:
0
1
2
3
4
5
A lépésköz is megadható, ebben az esetben 0.3:
julia> collect(1.0:0.3:2.0)
4-element Vector{Float64}:
1.0
1.3
1.6
1.9
A szintaxis tehát start:stepsize:stop.
Mindkét végpont beleértendő, ahogy az egész számos példában is látszik.
Ha a lépésköz nem osztja pontosan a stop - start értéket, az utolsó elem nem haladja meg a stop-ot.
A range-ekben nem numerikus sorozatok is szerepelhetnek. A legegyszerűbb példa az ASCII-betűk:
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)
A Char típussal egy másik fogalom foglalkozik majd részletesebben.
Egyelőre tekintsd ezeket egyszeres idézőjelbe tett egyetlen karaktereknek.
A range határait a first() és a last() függvénnyel ellenőrizheted.
r = 1:10 # => 1:10
first(r) # => 1
last(r) # => 10
Vektorindexelésben egész számokat tartalmazó range-ek és vektorok is használhatók:
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]
Sakkrajongóként szeretnéd megírni a játék saját változatát. Igaz, máris rengeteg sakkimplementáció elérhető az interneten, de a tiéd egyedi lesz!
De mielőtt szabadjára engednéd a fantáziádat, a legalapvetőbb dolgokkal kell kezdened. Kezdjük a tábla előállításával.
A sakktábla minden mezőjét egy betűből és egy számból álló pár azonosítja. A mezők függőleges oszlopait, amelyeket file-oknak neveznek, A-tól H-ig jelölik. A mezők vízszintes sorait, amelyeket rank-oknak neveznek, 1-től 8-ig számozzák.
Valósítsd meg a rank_range() függvényt. Egy egész számokból álló tartományt kell visszaadnia 1-től 8-ig.
julia> rank_range()
# output omitted
Valósítsd meg a file_range() függvényt.
Egy karakterekből álló tartományt kell visszaadnia a nagybetűs A-tól a nagybetűs H-ig.
julia> file_range()
# output omitted
Valósítsd meg a ranks() függvényt. Egy egész számokból álló vektort kell visszaadnia 1-től 8-ig.
Ne írd le kézzel a vektort, hanem a rank_range() függvény által visszaadott tartományból állítsd elő.
julia> ranks()
[1, 2, 3, 4, 5, 6, 7, 8]
Valósítsd meg a files függvényt. Egy karakterekből álló vektort kell visszaadnia 'A'-tól 'H'-ig.
Ne írd le kézzel a vektort, hanem a file_range() függvény által visszaadott tartományból állítsd elő.
julia> files()
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Julia nyelvet 35 fogalom128 feladat segítségével, valódi emberi mentorálással, mindez ingyen.