- 関数型プログラミング言語Haskell Part27_©2ch.net
222 :デフォルトの名無しさん[]:2015/01/22(木) 00:01:32.40 ID:yXMo1Viy - >>221
>参照透明を保ったまま副作用を扱う仕組みがモナド 駱駝師匠の受け売りではないが、参照透明を保ちつつモナドで 隠伏的に世界状態を受け渡すのがHaskellのIOのコツなんで、 普通の言語で「副作用」と呼ばれるものを、世界→(値,世界)な 関数としていわば「主作用」にしているというべきではあるまいか。 つうかだな、この観点からは手続き型言語の手続き自体が、 計算機の状態から計算機の状態への純粋な関数なんだよね。
|
- 関数型プログラミング言語Haskell Part27_©2ch.net
225 :デフォルトの名無しさん[]:2015/01/22(木) 00:54:14.02 ID:yXMo1Viy - >>223
うーん、値は値でいいんだよ。 同じ引数で同じ関数を呼び出した時に同じ返り値、ってのが守られてればいい。 引数として計算機の状態を明示的に追加すれば、いわゆる手続きも純粋な関数。 そしてこれは実は参照透明。可変な値は実際には計算機の状態を受け取る関数だから。
|
- 関数型プログラミング言語Haskell Part27_©2ch.net
226 :デフォルトの名無しさん[]:2015/01/22(木) 00:57:47.95 ID:yXMo1Viy - まあそうか、手続き型観点のからは、mutableな「変数」を
計算機の状態を受け取る関数として理解するのは「通常とは違う意味」なのかもな。 個人的にはそういう関数として理解することが多いので、ズレてるのかもしれん。
|
- 関数型プログラミング言語Haskell Part27_©2ch.net
228 :デフォルトの名無しさん[]:2015/01/22(木) 01:59:40.16 ID:yXMo1Viy - >>227
Hoare論理とか手続き型の表示意味論とか考えるとむしろ「世界状態の関数」という理解の方が本筋に思えるのだよ。 命令を表す抽象型、という方が便利な方便に思える(いや確かに1級の値として扱えるし便利なんだが)。
|
- 関数型プログラミング言語Haskell Part27_©2ch.net
230 :デフォルトの名無しさん[]:2015/01/22(木) 02:54:10.14 ID:yXMo1Viy - >>229
対偶は「副作用があってもまずくない→遅延評価でない」 逆は「副作用があるとまずい→遅延評価である」 裏は「遅延評価でない→副作用があってもまずくない」 「副作用無し→ 遅延評価でも大丈夫」はこのいずれでもない。
|
- 関数型プログラミング言語Haskell Part27_©2ch.net
232 :デフォルトの名無しさん[]:2015/01/22(木) 07:29:09.34 ID:yXMo1Viy - >>231
お前さんがしたいだろう主張の正しい定式化は (遅延評価が採用されている ∧ 副作用がある) → 動作がまずい ⇔遅延評価が採用されている → (副作用がない ∨ 動作がまずい) ⇔遅延評価が採用されている → (副作用がある → 動作がまずい) だ。これはお前さんの (遅延評価が採用されている → 副作用がある) → 動作がまずい ではない。「flipして戻すと」とか最初からできない。 その時点で逆だの対偶だのと関係なくなってるわ。
|
- 関数型プログラミング言語Haskell Part27_©2ch.net
234 :デフォルトの名無しさん[]:2015/01/22(木) 08:20:28.03 ID:yXMo1Viy - >>233
それなら「flipして戻す」とかできないだろ。 前2つは「→」で結合されてないんだからな。
|
- 関数型プログラミング言語Haskell Part27_©2ch.net
239 :デフォルトの名無しさん[]:2015/01/22(木) 09:12:23.26 ID:yXMo1Viy - >>235
ありゃ、そらそうだ。すまんね。だが、それで言えるのは 副作用がある → (遅延評価が採用されている → 動作がまずい) なので(これは正しい定式だ)、 >>231が「flipして戻す」をしてないってこったね。
|
- 関数型プログラミング言語Haskell Part27_©2ch.net
240 :デフォルトの名無しさん[]:2015/01/22(木) 09:14:16.99 ID:yXMo1Viy - ん、ありゃ混乱してきた。
>>231は「flipして戻す」はしてるのか。すまんほんとうにすまん。 眠くてボケてるな。 単に対偶とか逆とか裏とかを取るそういう操作じゃないってだけだ。
|
- 関数型プログラミング言語Haskell Part27_©2ch.net
251 :デフォルトの名無しさん[]:2015/01/22(木) 11:39:34.25 ID:yXMo1Viy - >>250
System.Mem ( performGC:: IO() ) 使えば?
|
- 関数型プログラミング言語Haskell Part27_©2ch.net
253 :デフォルトの名無しさん[]:2015/01/22(木) 12:16:17.06 ID:yXMo1Viy - お、便利。
|