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.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow