トップページ > プログラム > 2015年02月25日 > 4X+FbhYD

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

17 位/210 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000030001004



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

書き込みレス一覧

関数型プログラミング言語Haskell Part27_©2ch.net
689 :デフォルトの名無しさん[]:2015/02/25(水) 17:10:15.53 ID:4X+FbhYD
>>688

メモリの値とターミナルの状態という機械状態を
S=<("x",Vx),("y",Vy),(T)>と表すとして
だとして、

x=1;
→ 関数(f1) --- f1 <("x",Vx),("y",Vy),(T)> = <("x",1),("y",Vy),(T)>
y=2;
→ 関数(f2) --- f2 <("x",Vx),("y",Vy),(T)> = <("x",Vx),("y",2),(T)>
x=x+y;
→ 関数f3 --- f3 <("x",Vx),("y",Vy),(T)> = <("x",Vx+Vy),("y",Vy),(T)>
print x;
→ 関数f4 --- f4 <("x",Vx),("y",Vy),(T)> = <("x",Vx),("y",Vy),(T++show Vx)>
print y;
→関数f5 --- f5 <("x",Vx),("y",Vy),(T)> = <("x",Vx),("y",Vy),(T++show Vy)>

で、これを(逐次実行は関数合成として理解できるので)関数合成すると
f5 . f4 . f3 . f2 . f1 <("x",Vx),("y",Vy),(T)> = <("x",3),("y",2),(T++ "3" ++ "2" )>
という関数になる。
関数型プログラミング言語Haskell Part27_©2ch.net
691 :デフォルトの名無しさん[]:2015/02/25(水) 17:17:12.91 ID:4X+FbhYD
あ、書き落としてたが、これらの関数・写像は
S → S なので、そのグラフはS×Sで、
つまり命令形の手続きはSの直積の部分集合と同一視できるということになる(というか数学的には同一)。
関数型プログラミング言語Haskell Part27_©2ch.net
692 :デフォルトの名無しさん[]:2015/02/25(水) 17:18:00.41 ID:4X+FbhYD
>>690
あ、そういう答えを要求してるんだったのか……
関数型プログラミング言語Haskell Part27_©2ch.net
695 :デフォルトの名無しさん[]:2015/02/25(水) 21:40:11.60 ID:4X+FbhYD
>>693
>演算が置かれている場所や状態空間が少し変わると、同じ演算なのに
>変わってしまうということはないのでしょうか?

というか、逐次実行が関数合成になるように状態空間を定めるので、話は逆。
手続が内部で持ってる状態を全部引数に蓄積子として突っ込んでいけば
最終的に必ず純粋な関数になるので大丈夫、というだけの話ではあり。


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