サーチ…


構文

  • iterの私のために; ...;終わり
  • 一方、cond。 ...;終わり
  • ブレーク
  • 持続する
  • iterのiのための@parallel(op); ...;終わり
  • iterのiのための@parallel; ...;終わり
  • @gotoラベル
  • @ラベルラベル

備考

コードを短く読みやすくするたびに、ループの代わりにmapfilterなどの高次関数を使用することを検討してください。

フィッツバズ

forループの一般的な使用例は、あらかじめ定義された範囲またはコレクションを反復し、すべての要素に対して同じタスクを実行することです。例えば、ここでは、 forループと条件付きif - elseif - elseステートメントを組み合わせ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

これは古典的なFizz Buzzインタビューの質問です。 (切り捨てられた)出力は次のとおりです。

1
2
Fizz
4
Buzz
Fizz
7
8

最小素因数を求める

状況によっては、ループ全体を終了する前にある関数から戻りたいと思うかもしれません。このためにreturnステートメントを使用することができます。

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

使用法:

julia> primefactor(100)
2

julia> primefactor(97)
97

ループは、 break文で早期に終了することもできます。これは、関数全体ではなく、囲むループを終了させます。

多次元反復

Juliaではforループにコンマ( , )を入れて、複数の次元にわたる反復を指定することができます。これはループを別のループ内にネストするのと同様に機能しますが、よりコンパクトにすることができます。例えば、以下の関数は、2つの繰り返し可能なデカルト積の要素を生成します。

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

使用法:

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)

しかし、任意の次元のアレイ上インデクシングを用いて行われるべきであるeachindexない多次元ループ(可能な場合)で、:

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

縮小と並列ループ

Juliaは、複数のマシンや作業者間で計算を分散させるためのマクロを提供しています。たとえば、次の例では、いくつかの数の平方和を、おそらく並列に計算します。

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

使用法:

julia> sumofsquares(1:10)
385

このトピックの詳細については、Parallel Processesのトピックの @parallelを参照してください。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow