Foundations of F#を読む(2)

ちょっとずつ読んでますが、まだ3章の半分くらい・・・

そういえば、Foundations of F#を読む(1) - ZOETROPEの日記フィボナッチ数列を求めるプログラムを書きましたが、不思議に感じたことが1つ。

それは、フィボナッチ数列を一気にガーっと算出→その結果の配列を表示という流れではなくて、フィボナッチ数を1つ求めては1つ表示という処理を繰り返しているということ。

C#で言うとyieldを使っているようなものなのかな。(C#のほうが関数型の概念を取り入れたんだとは思うけど。)

using System;
using System.Collections;

namespace Sample
{
    class Program : IEnumerable
    {
        static void Main(string[] args)
        {
            foreach (int i in new Program())
            {
                Console.WriteLine(i);
            }
        }

        public IEnumerator GetEnumerator()
        {
            for (int i = 0; i < 100; i++)
            {
                yield return fib(i);
            }
        }

        public int fib(int x)
        {
            if (x < 2) return 1;
            else return fib(x - 1) + fib(x - 2);
        }

    }
}