関数型プログラミング ..
52:デフォルトの名無しさん
07/11/07 00:05:04
>>51
randomRIO :: (Int, Int) -> IO Int
というのを考えてみる。これは要するに与えられた範囲の乱数を生成する関数な訳だけど、
厳密に考えると、これは動作を返す関数で、同じ引数で呼ばれたら常に同じ動作を返す。
例えば、(0, 3)を与えて呼び出すと、常に「0以上3以下の乱数を生成する」という動作を返す。
この「動作」を実行した結果はもちろん毎回違うけど、それをHaskellプログラムが
受け取ることはないので、参照透過性には影響ない。
(この動作の結果を受け取って別のことをする、より大きな動作を作ることはできるけど)
これは別に言葉遊びじゃなくて、実際、randomRIO (0, 3)が複数回出てくる巨大な式
f x = ... randomRIO (0, 3) >> ...... fmap (1-) $ randromRIO (0, 3) ...
があったとして、これを機械的に一つにまとめて
f x = let z = randomRIO (0, 3) in ... z >> ...... fmap (1-) $ z ...
としても意味が変わらないことが保証される。これが参照透過性。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5324日前に更新/201 KB
担当:undef