引数に受け取るものだけ実装すればOK。実装すると後々問題が起きるので注意(詳細後述)IteratorSizeイテレータのサイズについての情報。ここで言うサイズとは、列挙する長さや次元が決まっているか、ということ。対象の型を引数に受け取って、以下のいずれかを返す。SizeUnknown():列挙するサイズが不定の場合、「実行する度に長さが変わる可能性がある場合」など。HasLength():長さが有限で固定の場合。実装する必要があります。HasShape{N}():長さが分かっていて、かつ配列と互換性のある『次元数』の概念がある場合。実装する必要があります。IsInfinite():無限列挙する場合。返す仕様になっています。size(fr.range))にしています。iterate列挙の本体3。これを利用して、その都度フィボナッチ数を算出して返すように実装。呼ぶのではなく、公式(定義)を利用して「2つ前と1つ前から次のフィボナッチ数を計算」しています。こっちの方が効率断然良い!ので。部分が「すべて列挙し終わったのでイテレーション終了」の意味になってます。s個ごと(=s-1個おき)に取得」という仕様。定義で、そのようなオブジェクトを生成することはもうできてます。