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

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

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

Python の例(4)

Python 版も同様に修正します。

Numbers クラスから CurrentDigit プロパティと current_digit を削除し、コピーするメソッドを追加します。

    def Copy(self):
        return Numbers(self.number, self.square_difference, self.scale)

UnfoldL 関数を作成します。Iterate を UnfoldL で置き換えます。

def UnfoldL(next, init):
    src = init
    while True:
        dd, src = next(src)
        yield dd

NextNumbers を以下の NextDigitAndNumbers で置き換えます。

def NextDigitAndNumbers(numbers):
    numbers_copy = numbers.Copy()
    dd = numbers_copy.GetNextDecimalDigit()
    return dd, numbers_copy

Calc クラスの IterateServer メソッドは以下のように UnfoldL を使うように変更します。GetNextDecimalDigit を1回呼び出しているところは削除します。

    def IterateServer(self):
        number = LongDecimal([])
        square_difference = LongDecimal([3])
        init_numbers = Numbers(number, square_difference, 0)
        dec = list(Take(self.count, UnfoldL(NextDigitAndNumbers, init_numbers)))
        return LongDecimal(dec).Print()