トップページ > プログラム > 2015年02月22日 > EMxeLusr

書き込み順位&時間帯一覧

42 位/252 ID中時間01234567891011121314151617181920212223Total
書き込み数0200000000000000000000002



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
関数型プログラミング言語Haskell Part27_©2ch.net

書き込みレス一覧

関数型プログラミング言語Haskell Part27_©2ch.net
648 :デフォルトの名無しさん[sage]:2015/02/22(日) 01:25:00.60 ID:EMxeLusr
>>645
>副作用の説明として、ある入力の組に対して複数の出力の組の場合があり、そういう現象を起こすのがIOや破壊的代入とある

この「ある入力の組に対して複数の出力の組の場合があり」という1対多の関係は、
確かに数学だと関数ではない
で、この板/スレでは(数学ではなく)プログラミング言語とその表現論を議論している訳だから、
ソフトウェア科学の中で対応する概念を考えてみると、たとえば非決定性があるね

非決定性には複数の意味があり、一つはパズルやゲームの分野で解の探索で用いられる
たとえばゲームで次の一手を計算する関数は、ゲーム盤のある局面(=入力)に対して
次の局面(=出力)が複数確定するから非決定的と呼ばれる
もう一つは評価してみなければ結果が確定しない関数のことで、代表的な例には
マッカーシーの amb やターナーの merge があり、それらは総称して非決定的関数と呼ばれる
(他には並行/並列計算の分野でも非決定性は用いられるけど、おそらく今回は無関係だろう)

さて副作用の中で、おそらく入力関数は後者の非決定性が該当すると思われる
けれども出力関数は常にある値からただ一つのユニット値が確定するから決定的に見えるし、
破壊的代入関数についてはどちらにも該当するように見え、同時に操作的意味論だと
破壊的代入という操作を代入前の値から代入後の値への関数として定義するから決定的にも見える

ということで、出力や破壊的代入はどちらに対応するのかを具体的に解説して欲しい
あるいは非決定性とは別の(ソフトウェア科学における)概念を用いた説明でもかまわない
関数型プログラミング言語Haskell Part27_©2ch.net
649 :デフォルトの名無しさん[sage]:2015/02/22(日) 01:36:02.13 ID:EMxeLusr
>>647
その解釈だと否定形だけで終わっているから、
関数型言語で副作用は扱えないという結論になってしまうよね
でも現実には先行評価はもちろん遅延評価であってさえも副作用を扱う事ができるから、
どこかが間違っている or なにかが足りていないんじゃないかな?


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。