状態は難しい 変数 入出力 難しいなら無くしてしまえばよい 状態を排除 参照透明性 言語処理系の外側の状態はどうしようもないので 一意型 モナド 状態は難しい 状態は難しい。 例えば変数。変数の値が自由に変更可能なら、ある変数を使用する際には、その変数を変更可能な全ての場所を考慮しなければならない。 global変数のようなスコープの広すぎる変数で混乱した、確保した領域を二重に開放するコードを書いた、といった経験は皆あるはずである。 難しいなら無くしてしまえばよい 状態の問題を解決したい。その手段の1つとして、状態を無くしてしまえばよい、という極端なものがある。 変数を無くしてしまう。外部の状態の利用、つまりファイルの操作だとかは当然禁止する。 変数を無くしてもチューリング完全の意味で計算できる範囲に影響はない1ので問題はない。 そうすると、どの関数も、引数が同じならいつ計算しても値が同じ