Julia Language
dla pętli
Szukaj…
Składnia
- dla mnie w iter; ...; koniec
- podczas cond; ...; koniec
- przerwa
- kontyntynuj
- @parallel (op) dla i w iter; ...; koniec
- @parallel for i in iter; ...; koniec
- @goto label
- Etykieta @label
Uwagi
Ilekroć sprawia, że kod jest krótszy i łatwiejszy do odczytania, rozważ użycie funkcji wyższego rzędu, takich jak map
lub filter
, zamiast pętli.
Fizz Buzz
Typowym przypadkiem użycia pętli for
jest iteracja w predefiniowanym zakresie lub kolekcji i wykonanie tego samego zadania dla wszystkich jego elementów. Na przykład tutaj łączymy for
pętli z warunkowej if
- elseif
- else
oświadczenia :
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
To klasyczne pytanie do wywiadu Fizz Buzz . (Skrócone) wyjście to:
1
2
Fizz
4
Buzz
Fizz
7
8
Znajdź najmniejszy czynnik pierwszy
W niektórych sytuacjach można chcieć powrócić z funkcji przed zakończeniem całej pętli. Można do tego użyć instrukcji return
.
function primefactor(n)
for i in 2:n
if n % i == 0
return i
end
end
@assert false # unreachable
end
Stosowanie:
julia> primefactor(100)
2
julia> primefactor(97)
97
Pętle można również zakończyć wcześniej za pomocą instrukcji break
, która kończy tylko otaczającą pętlę zamiast całej funkcji.
Wielowymiarowa iteracja
W Julii pętla for może zawierać przecinek ( ,
), aby określić iterację wielu wymiarów. Działa to podobnie do zagnieżdżania pętli w innej, ale może być bardziej kompaktowe. Na przykład poniższa funkcja generuje elementy iloczynu kartezjańskiego dwóch iterałów:
function cartesian(xs, ys)
for x in xs, y in ys
produce(x, y)
end
end
Stosowanie:
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)
Jednak indeksowanie tablic dowolnego wymiaru powinno odbywać się za pomocą eachindex
, a nie pętli wielowymiarowej (jeśli to możliwe):
s = zero(eltype(A))
for ind in eachindex(A)
s += A[ind]
end
Pętle redukcyjne i równoległe
Julia udostępnia makra, aby uprościć dystrybucję obliczeń na wielu komputerach lub procesach roboczych. Na przykład poniżej oblicza sumę pewnej liczby kwadratów, być może równolegle.
function sumofsquares(A)
@parallel (+) for i in A
i ^ 2
end
end
Stosowanie:
julia> sumofsquares(1:10)
385
Aby uzyskać więcej informacji na ten temat, zobacz przykład na @parallel
w temacie Parallel @parallel
.