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()