Recherche…


Syntaxe

  • pour i in iter; ...; fin
  • tandis que cond; ...; fin
  • Pause
  • continuer
  • @parallel (op) pour i in iter; ...; fin
  • @parallel pour i in iter; ...; fin
  • @goto label
  • @label label

Remarques

Si cela rend le code plus court et plus facile à lire, envisagez d'utiliser des fonctions d'ordre supérieur, telles que map ou filter , plutôt que des boucles.

Fizz Buzz

Un cas d'utilisation courant pour une boucle for consiste à parcourir une plage ou une collection prédéfinie et à effectuer la même tâche pour tous ses éléments. Par exemple, nous combinons ici une boucle for avec une instruction 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

Ceci est la question d'interview classique de Fizz Buzz . La sortie (tronquée) est:

1
2
Fizz
4
Buzz
Fizz
7
8

Trouver le plus petit facteur premier

Dans certaines situations, on peut vouloir revenir d'une fonction avant de terminer une boucle entière. La déclaration de return peut être utilisée pour cela.

function primefactor(n)
    for i in 2:n
        if n % i == 0
            return i
        end
    end
    @assert false  # unreachable
end

Usage:

julia> primefactor(100)
2

julia> primefactor(97)
97

Les boucles peuvent également être terminées tôt avec l'instruction break , qui termine uniquement la boucle englobante au lieu de la fonction entière.

Itération multidimensionnelle

Dans Julia, une boucle for peut contenir une virgule ( , ) pour spécifier une itération sur plusieurs dimensions. Cela agit de la même manière que l'imbrication d'une boucle dans une autre, mais peut être plus compacte. Par exemple, la fonction ci-dessous génère des éléments du produit cartésien de deux itérables:

function cartesian(xs, ys)
    for x in xs, y in ys
        produce(x, y)
    end
end

Usage:

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)

Toutefois, l'indexation sur des tableaux de toute dimension doit être effectuée avec eachindex , et non avec une boucle multidimensionnelle (si possible):

s = zero(eltype(A))
for ind in eachindex(A)
    s += A[ind]
end

Boucles de réduction et parallèles

Julia fournit des macros pour simplifier la distribution des calculs sur plusieurs machines ou travailleurs. Par exemple, le calcul suivant calcule la somme d'un certain nombre de carrés, éventuellement en parallèle.

function sumofsquares(A)
    @parallel (+) for i in A
        i ^ 2
    end
end

Usage:

julia> sumofsquares(1:10)
385

Pour plus d'informations sur ce sujet, consultez l' exemple sur @parallel dans la rubrique Processus parallèle.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow