エレファント・ビジュアライザー調査記録

ビジュアルプログラミングで数式の変形を表すことを考えていくブロクです。

関数プログラミングと無限論理多項式(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;
    }
}