Julia Language
forループ
サーチ…
構文
- iterの私のために; ...;終わり
- 一方、cond。 ...;終わり
- ブレーク
- 持続する
- iterのiのための@parallel(op); ...;終わり
- iterのiのための@parallel; ...;終わり
- @gotoラベル
- @ラベルラベル
備考
コードを短く読みやすくするたびに、ループの代わりにmap
やfilter
などの高次関数を使用することを検討してください。
フィッツバズ
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