非専門的シンギュラリティー研究所

無限に動き続けるシステムを表す方法を AI なども使って考えていきます。

自由モノイドのイテレーター(15)

自由モノイドプログラミング言語の作成(MonIter C#スタイル版 バージョン1.2 (2))

フィボナッチ数列の例

フィボナッチ数列の例を遅延評価ができるように書き直すと以下のようになります。

型 eint が使えるようにします。

using eint = System.Collections.Generic.IEnumerable<int>;

以下の関数を定義しておきます。

        private eint zipsum(eint mon1, eint mon2) => mon1.Zip(mon2, (x, y) => x + y);
        private eint tail(eint x) => x.Skip(1);
        private eint concat(int x, eint y) => new[] { x }.Concat(y);
引数で渡すバージョン
    eint fib(int x, int y)
    {
        foreach (int n in concat(x, fib(y, x + y)))
        {
            yield return n;
        }
    }