Julia Language
per loop
Ricerca…
Sintassi
- per i in iter; ...; fine
- mentre cond; ...; fine
- rompere
- Continua
- @parallel (op) per i in iter; ...; fine
- @parallel for i in iter; ...; fine
- Etichetta @goto
- etichetta @label
Osservazioni
Ogni volta che rende il codice più breve e più facile da leggere, considera l'utilizzo di funzioni di ordine superiore, come la map
o il filter
, anziché i loop.
Fizz Buzz
Un caso d'uso comune per un ciclo for
è quello di iterare su un intervallo o una collezione predefiniti, e fare lo stesso compito per tutti i suoi elementi. Ad esempio, qui combiniamo un ciclo for
con un'istruzione condizionale if
- elseif
- else
:
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
Questa è la classica domanda dell'intervista di Fizz Buzz . L'output (troncato) è:
1
2
Fizz
4
Buzz
Fizz
7
8
Trova il fattore primo più piccolo
In alcune situazioni, si potrebbe voler tornare da una funzione prima di terminare un intero ciclo. Il return
dichiarazione può essere utilizzato per questo.
function primefactor(n)
for i in 2:n
if n % i == 0
return i
end
end
@assert false # unreachable
end
Uso:
julia> primefactor(100)
2
julia> primefactor(97)
97
I loop possono anche essere terminati in anticipo con l'istruzione break
, che termina solo il ciclo di chiusura anziché l'intera funzione.
Iterazione multidimensionale
In Julia, un ciclo for può contenere una virgola ( ,
) per specificare il iterazione su più dimensioni. Questo agisce in modo simile per annidare un ciclo all'interno di un altro, ma può essere più compatto. Ad esempio, la funzione seguente genera elementi del prodotto cartesiano di due iterabili:
function cartesian(xs, ys)
for x in xs, y in ys
produce(x, y)
end
end
Uso:
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)
Tuttavia, l'indicizzazione su array di qualsiasi dimensione dovrebbe essere eseguita con ogni eachindex
, non con un ciclo multidimensionale (se possibile):
s = zero(eltype(A))
for ind in eachindex(A)
s += A[ind]
end
Riduzione e loop paralleli
Julia fornisce macro per semplificare la distribuzione del calcolo su più macchine o lavoratori. Ad esempio, il seguente calcola la somma di un certo numero di quadrati, possibilmente in parallelo.
function sumofsquares(A)
@parallel (+) for i in A
i ^ 2
end
end
Uso:
julia> sumofsquares(1:10)
385
Per ulteriori informazioni su questo argomento, vedere l' esempio su @parallel
all'interno dell'argomento Processi paralleli.