- 関数型プログラミング言語Haskell Part27_©2ch.net
648 :デフォルトの名無しさん[sage]:2015/02/22(日) 01:25:00.60 ID:EMxeLusr - >>645
>副作用の説明として、ある入力の組に対して複数の出力の組の場合があり、そういう現象を起こすのがIOや破壊的代入とある この「ある入力の組に対して複数の出力の組の場合があり」という1対多の関係は、 確かに数学だと関数ではない で、この板/スレでは(数学ではなく)プログラミング言語とその表現論を議論している訳だから、 ソフトウェア科学の中で対応する概念を考えてみると、たとえば非決定性があるね 非決定性には複数の意味があり、一つはパズルやゲームの分野で解の探索で用いられる たとえばゲームで次の一手を計算する関数は、ゲーム盤のある局面(=入力)に対して 次の局面(=出力)が複数確定するから非決定的と呼ばれる もう一つは評価してみなければ結果が確定しない関数のことで、代表的な例には マッカーシーの amb やターナーの merge があり、それらは総称して非決定的関数と呼ばれる (他には並行/並列計算の分野でも非決定性は用いられるけど、おそらく今回は無関係だろう) さて副作用の中で、おそらく入力関数は後者の非決定性が該当すると思われる けれども出力関数は常にある値からただ一つのユニット値が確定するから決定的に見えるし、 破壊的代入関数についてはどちらにも該当するように見え、同時に操作的意味論だと 破壊的代入という操作を代入前の値から代入後の値への関数として定義するから決定的にも見える ということで、出力や破壊的代入はどちらに対応するのかを具体的に解説して欲しい あるいは非決定性とは別の(ソフトウェア科学における)概念を用いた説明でもかまわない
|