こんな強力な構文があるとは知りませんでした。今回はwhereを使っていきます。whereを使わない例です。doで回して配列aの要素が5より大きかったら、配列bに代入するときに、2倍にするプログラムです。20takk@deb9:~$6行目から2倍になってますね。上のプログラムをwhereを使って作り直すとこうなります。endtakk@deb9:~$いやあスゴイ。なんて簡潔に書けるのでしょうか。実行するともちろん同じ結果になります。whereの間に配列代入文を挿むだけ。whereもしくはこのパターン。where配列代入文以外はだめなのでしょうか。配列代入の代わりにwriteを入れてみます。endtakk@deb9:~$ビルドエラーとなります。(1)takk@deb9:~$もちろんwhere構文内なので配列代入しかできないのであって、if文の中なら問題ないです。HELLOtakk@deb9:~$普通の代入はどうでしょうか。shapetakk@deb9:~$whereの中では、普通の代入もエラーとなりました。配列代入のみしか書くことはできないようです。その2whereを使って配列を初期化する方法を考えてみます。配列を同じ値で初期化する場合は、たとえば1なら、こんな風に書けると思います。1は常に真でもよかったかもしれませんが、書き方が分からないので、1以外なら1で初期化するようにしています。1takk@deb9:~$1で初期化できました。data文で初期化するのとどちらがプログラムサイズが少なくて済むでしょうか。配列数を10000ぐらいにして確認してみます。data文を使って静的に初期化した場合。a.outtakk@deb9:~$簡潔に書けますね。