副作用のある関数の問題は、関数型プログラミングやラムダ式関連でちょっとまえから話題に上がるようになったけど、実はダイクストラの昔からある話。 ALGOL型のサブルーチン=関数だけではこれがうまく解決できなくて、泥臭いグローバル変数つかうのが問題になってた。 構造体、さらにオブジェクト指向を使うと状態の情報やコンテキストといった物を引数に渡せるので副作用を無くすのが簡単になったんだけど、 それはまた別のお話。