Julia Language
für Loops
Suche…
Syntax
- denn ich in iter; ... Ende
- während cond; ... Ende
- brechen
- fortsetzen
- @parallel (op) für i in iter; ... Ende
- @parallel für i in iter; ... Ende
- @goto label
- @label label
Bemerkungen
Immer dann , wenn es Code kürzer und leichter lesen macht, sollten Sie mit Funktionen höherer Ordnung, wie map
oder filter
, anstelle von Schleifen.
Fizz Buzz
Ein häufiger Anwendungsfall für eine for
Schleife besteht darin, einen vordefinierten Bereich oder eine vordefinierte Sammlung zu durchlaufen und dieselbe Aufgabe für alle Elemente auszuführen. Zum Beispiel kombinieren wir hier eine for
Schleife mit einer bedingten if
elseif
else
Anweisung :
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
Dies ist die klassische Fizz Buzz- Interviewfrage. Die (abgeschnittene) Ausgabe ist:
1
2
Fizz
4
Buzz
Fizz
7
8
Finde den kleinsten Primfaktor
In einigen Situationen möchten Sie möglicherweise von einer Funktion zurückkehren, bevor Sie eine gesamte Schleife abschließen. Die return
Anweisung kann dazu verwendet werden.
function primefactor(n)
for i in 2:n
if n % i == 0
return i
end
end
@assert false # unreachable
end
Verwendungszweck:
julia> primefactor(100)
2
julia> primefactor(97)
97
Schleifen können auch mit der break
Anweisung vorzeitig beendet werden, wodurch nur die einschließende Schleife anstelle der gesamten Funktion beendet wird.
Mehrdimensionale Iteration
In Julia kann eine for-Schleife ein Komma ( ,
) enthalten, um die Iteration über mehrere Dimensionen anzugeben. Dies funktioniert ähnlich wie das Schachteln einer Schleife in einer anderen, kann jedoch kompakter sein. Mit der Funktion unten werden beispielsweise Elemente des kartesischen Produkts aus zwei iterierbaren Elementen generiert:
function cartesian(xs, ys)
for x in xs, y in ys
produce(x, y)
end
end
Verwendungszweck:
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)
Die Indizierung von Arrays einer beliebigen Dimension sollte jedoch mit eachindex
, nicht mit einer mehrdimensionalen Schleife (falls möglich):
s = zero(eltype(A))
for ind in eachindex(A)
s += A[ind]
end
Reduktion und Parallelschleifen
Julia bietet Makros zur Vereinfachung der Verteilung von Berechnungen auf mehrere Maschinen oder Worker. Im Folgenden wird beispielsweise die Summe einiger Quadrate berechnet, möglicherweise parallel.
function sumofsquares(A)
@parallel (+) for i in A
i ^ 2
end
end
Verwendungszweck:
julia> sumofsquares(1:10)
385
Weitere @parallel
zu diesem Thema finden Sie im Beispiel zu @parallel
im Thema Parallele Verarbeitung.