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

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

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

自由モノイドプログラミング言語の作成(Python版 3)

自由モノイドのクラス(2)

自由モノイドのクラスでは、内部でリストを使っているのに __next__ ではイテレーターとして使っていませんでした。これはこうしないと常に同じ値を返すようになっていたためです。

	def __init__(self, iterobj: Iterable[T]):
		self.elements: Iterator[T] = iter(iterobj)

のように self.elements (生成元の有限個または無限個の積を表す)の型を Iterator[T] にすると __next__ は

	def __next__(self) -> T:
		return next(self.elements)

のようにできることがわかりました。リストの場合は iter で変換したものを保持すれば良いようです。

このように前回の記事を修正しました。

この説明を書こうとしたのですが、検索してみると、型チェックはバージョンによって違う場合があるようです。このコードは Python 3.9 で Visual Studio で型チェックを行っています。