エレファント・コンピューティング調査報告

極限に関する順序を論理プログラミングの手法を使って指定することを目指すブロクです。

関数プログラミングと無限論理多項式(16)

JavaScript の例(4) (TypeScript)

TypeScript 版も C# 版と同様に修正します。Take 関数も間違っていたので修正します。NumbersServer クラスの GetNumbers メソッドを以下のように値を返すだけに変更します。

    GetNumbers(): Numbers {
        return this.current_numbers;
    }

これだけでは最初の値がないので、コンストラクターで GenerateDecimalServer でやっていた初期化の処理を行います。

    constructor() {
        var number: LongDecimal = new LongDecimal([]);
        var square_difference: LongDecimal = new LongDecimal([3]);
        this.current_numbers = new Numbers(number, square_difference, 0);
    }

GenerateDecimalServer は以下のようにします。初期化の部分はコンストラクターに移動します。

    *GenerateDecimalServer(): Iterable<Numbers> {
        for (; ;) {
            this.current_numbers = yield this.current_numbers;
        }
    }

Take 関数は以下のようになります。

function* Take<T>(n: number, generator: Iterable<T>): Iterable<T> {
    var count = 0;
    for (var d of generator) {
        if (count == n) {
            break;
        }
        count++;
        yield d;
    }
}