for...in式
Midoliy|F#プログラミング

for...in式の概要
サンプルでみるfor...in式

for...in式の概要


 for...in式は命令型プログラミング言語では一般的なループ構文の一つです。C#でいうところの 'foreach文' です。
 このループ構造は、range・seq・list・arrayなどのF#コレクション型や、列挙をサポートする.NETコレクション内の各要素を反復処理するために使われます。
// ------------------
// [ 構文 ]
// ------------------

for pattern in enumerable-expression do
    body-expression
                

 for...in式では、コレクション(= enumerable-expression)の要素を一つずつ取り出し、その値をパターン値(= pattern)に束縛します。body-expression には、束縛したパターン値を利用した '処理の実体' を記述することができます。ただし、コレクション全体に対する単なる反復処理だけでなく、コレクションに対するパターンマッチングもサポートされている点が異なります。
 for...in式の enumerable-expression には、列挙可能なコレクションとして、 ..演算子(範囲演算子) を利用して作成した整数型の範囲値も指定することが可能です。また、その他にも System.Collections.IEnumerableを実装している型であれば、自作のコレクションでも for...in式 を利用することができます。

 ..演算子を使用して範囲を表現するときは、以下のように指定することができます。
start..finish
    ex) for i in 0..10 do printf "%d " i
        // output: 0 1 2 3 4 5 6 7 8 9 10

 また、次のコードのように、スキップと呼ばれる増分を含む定義の方法もあります。
start..skip..finish
    ex) for i in 0..2..10 do printf "%d " i
        // output: 0 2 4 6 8 10

 整数範囲にskipがない単純なパターンの場合、カウンタ値(今回の場合は i )は反復ごとに 1ずつ 増えていきます。skipが指定されている場合、反復ごとにそのskip値の分だけカウンタ値が増えていきます。


サンプルでみるfor...in式


 以下は簡単な for...in式 の使い方のサンプルになります。


 seq型のサンプルに注目してみましょう。カウンタ値= (a, asqr) の箇所で タプルパターンを利用していることがわかります。このようにカウンタ値にはパターンマッチを利用できるので、覚えておくと役立つときがあるでしょう。