Julia Language
voor lussen
Zoeken…
Syntaxis
- want ik in iter; ...; einde
- terwijl cond; ...; einde
- breken
- doorgaan met
- @parallel (op) voor i in iter; ...; einde
- @parallel voor i in iter; ...; einde
- @goto label
- @label label
Opmerkingen
Wanneer het code korter en gemakkelijker te lezen maakt, overweeg dan om functies van een hogere orde te gebruiken, zoals map
of filter
, in plaats van lussen.
Fizz Buzz
Een veelvoorkomend geval voor een for
lus is itereren over een vooraf gedefinieerd bereik of verzameling en dezelfde taak uitvoeren voor alle elementen. Hier combineren we bijvoorbeeld een for
lus met een voorwaardelijke if
- elseif
- else
instructie :
for i in 1:100
if i % 15 == 0
println("FizzBuzz")
elseif i % 3 == 0
println("Fizz")
elseif i % 5 == 0
println("Buzz")
else
println(i)
end
end
Dit is de klassieke Fizz Buzz- interviewvraag. De (ingekorte) uitvoer is:
1
2
Fizz
4
Buzz
Fizz
7
8
Vind de kleinste priemfactor
In sommige situaties wilt u misschien terugkeren uit een functie voordat u een hele lus voltooit. De return
statement kan gebruikt voor zijn.
function primefactor(n)
for i in 2:n
if n % i == 0
return i
end
end
@assert false # unreachable
end
Gebruik:
julia> primefactor(100)
2
julia> primefactor(97)
97
Lussen kunnen ook vroegtijdig worden beëindigd met de instructie break
, waarmee alleen de insluitende lus wordt beëindigd in plaats van de hele functie.
Multidimensionale iteratie
In Julia kan een for-lus een komma ( ,
) bevatten om iteratie over meerdere dimensies te specificeren. Dit werkt op dezelfde manier als een lus in een andere lus, maar kan compacter zijn. De onderstaande functie genereert bijvoorbeeld elementen van het Cartesiaanse product met twee iterables:
function cartesian(xs, ys)
for x in xs, y in ys
produce(x, y)
end
end
Gebruik:
julia> collect(@task cartesian(1:2, 1:4))
8-element Array{Tuple{Int64,Int64},1}:
(1,1)
(1,2)
(1,3)
(1,4)
(2,1)
(2,2)
(2,3)
(2,4)
eachindex
over arrays van elke dimensie moet echter worden gedaan met elke eachindex
, niet met een multidimensionale lus (indien mogelijk):
s = zero(eltype(A))
for ind in eachindex(A)
s += A[ind]
end
Reductie en parallelle lussen
Julia biedt macro's om de distributie van berekeningen over meerdere machines of werknemers te vereenvoudigen. Het volgende berekent bijvoorbeeld de som van een aantal vierkanten, mogelijk parallel.
function sumofsquares(A)
@parallel (+) for i in A
i ^ 2
end
end
Gebruik:
julia> sumofsquares(1:10)
385
Zie het voorbeeld op @parallel
in het onderwerp Parallel Processinging voor meer informatie over dit onderwerp .