1. for ループの大域脱出法
多重 for ループの最も内側から一挙に最も外側の for ループのさらに外へ脱出する方法を何通りか記述する。
1.1. 状況を表す変数を使う方法
- 一番外側の for ループに入る前に success = false としておく。
- もっとも内側の for ループから脱出するときに,success = true として break で脱出する。
- 脱出した for ループで success の値をチェックし true ならばさらに break する。
これを繰り返して,一番外側の for ループも脱出する。
脱出開始時と脱出完了時の変数の値をみれば,確かに大域脱出していることが確認できる。
なお,success && break は
if success
break
end
と同じである。
success = false
count = 0
for i1 in 1:10
for i2 in 1:10
for i3 in 1:10
for i4 in 1:10
count += 1
if i1 == 2 && i2 == 3 && i3 == 4 && i4 == 5
success = true
println("最も内側から break するときの状態 success = $success, count = $count")
break
end
success && break
end
success && break
end
success && break
end
success && break
end
println("脱出後の状態 success = $success, count = $count")
最も内側から break するときの状態 success = true, count = 1235
脱出後の状態 success = true, count = 1235
1.2. 関数化する方法
当該処理を関数化しておけば,最も内側の for ループで return を使えば,大域脱出することになる。最も内側の for ループ中に確実に return するならば,最も外側の for ループの外に何があっても実行されない。
function f()
count = 0
for i1 in 1:10
for i2 in 1:10
for i3 in 1:10
for i4 in 1:10
count += 1
if i1 == 2 && i2 == 3 && i3 == 4 && i4 == 5
println("最も内側から return するときの状態 count = $count")
return
end
end
end
end
end
println("この println() は実行されない")
end
f()
最も内側から return するときの状態 count = 1235
1.3. Julia 独自の for ループ記法を使う方法
Julia では,多重 for ループを一行(for 文 1 個)で書く便法がある。これを使えば,見かけは一重の for ループのようであり,その中で break すれば,最も外側の for ループの外まで一挙に脱出することになる。 count = 0
for i1 in 1:10, i2 in 1:10, i3 in 1:10, i4 in 1:10
count += 1
if i1 == 2 && i2 == 3 && i3 == 4 && i4 == 5
println("最も内側から return するときの状態 count = $count")
break
end
end
println("脱出後の状態 count = $count")
最も内側から return するときの状態 count = 1235
脱出後の状態 count = 1235