[過去ログ] 関数型プログラミング言語Haskell Part16 (978レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
852: [―{}@{}@{}-] デフォルトの名無しさん [sage] 2011/12/25(日) 19:16:53.25 AAS
>>846846(3): デフォルトの名無しさん [sage] 2011/12/25(日) 19:05:37.16 AAS
>>841
> で、IOはたまたまモナドの枠組に適合する(ので、IOモナドと呼ばれる)
なるほど。
いつまでもIOモナドは難しいと言われ続ける理由がわかったよ。
本当にIOモナドは「たまたま」モナドの枠組みに適合してるの?
わざわざモナドとしての宣言をしているのを「たまたま」というの?
わざわざ色々なIOをモナド則にあわせて整理して宣言しているのを
「たまたま」とか言って誤魔化しているわけでしょ。
学ぶ人達の能力を信用していないから、そうやって誤魔化すわけだ。
そうやって学ぶ人達を信用せずに、ありのままを伝えず、
取って着けたようなすぐバレるデッチアゲばかり言うから、
学ぶ人達はどの言葉を信用すればいいかわからなくなって、
「Haskellは難しい」という結論になっているんじゃないの?
なんか誤解してるような気がする
1. IOは、純粋さを保ったまま入出力するための型である
2. IOはMonadのインスタンスである
この二つの事実が両方成り立つのは別に必然ではないという意味で「たまたま」と言った
モナドにならない型で入出力を表現することはできる(ストリームIOとか)し、
入出力と関係ないモナドももちろんある
つまりHaskellの入出力を理解するのにモナドを知っている必要はないし、(助けにはなるが)
モナドを理解するのにIOを知っている必要もない(助けにはなるが)
853(1): デフォルトの名無しさん [sage] 2011/12/25(日) 19:16:55.59 AAS
いや、それはおかしいだろ
OCamlで実装されたHaskellインタプリタだったらそのHaskellは純粋ではないことになるのか?
854: デフォルトの名無しさん [sage] 2011/12/25(日) 19:17:44.83 AAS
>>853は>>849849(3): デフォルトの名無しさん [sage] 2011/12/25(日) 19:12:41.64 AAS
>>847
> 副作用のある関数を一切使わずに
ダウト。Haskell上の値としては副作用はないが、
裏でランタイムがちゃんと副作用を起こしている。
宛
855(1): [―{}@{}@{}-] デフォルトの名無しさん [sage] 2011/12/25(日) 19:18:27.47 AAS
>>849
そこを気にするなら、「副作用のある関数」を
「呼ばれて評価されたときに副作用を起こす関数」と読み替えてくれ
856(1): デフォルトの名無しさん [] 2011/12/25(日) 19:21:55.56 AAS
>>845ありがと。ちょっと見てみるけどおれにはわからんだろな
>>846
怒らんで
>>847847(2): [―{}@{}@{}-] デフォルトの名無しさん [sage] 2011/12/25(日) 19:10:26.88 AAS
>>844
>IOモナドはモナドのひとつじゃないん?
そうだよ
>その「純粋さを保ったまま入出力をする仕組み」がモナドなんやろ?
IOモナドがその仕組み。それ以外のモナドは全然別のことをする(構文解析とか)
>純粋さって関数型のってこと?もしそうなら、どの程度保てるものなの?
副作用のある関数を一切使わずに入出力のあるプログラムが書ける
>それ以外のモナドは全然別のことをする
うん。そのときの共通性っていうの?それが知りたいんやが
>副作用のある関数を一切使わずに入出力のあるプログラムが書ける
ほんま?そんなことできるわけないやろ。なんかトリックなんやろ?
857: デフォルトの名無しさん [] 2011/12/25(日) 19:25:40.76 AAS
>849 から >>855
わ。レスポンスしたら他の兄さんらの難しい議論が始まって付いていけへん。
しばらく勉強や。
858(1): [―{}@{}@{}-] デフォルトの名無しさん [sage] 2011/12/25(日) 19:30:01.84 AAS
>>856
>うん。そのときの共通性っていうの?それが知りたいんやが
モナドの具体例(2〜3個)を知らない人に説明するのは難しい。俺にはできない
>ほんま?そんなことできるわけないやろ。なんかトリックなんやろ?
うん。おおさっぱに言うと、入出力をする関数がない代わりに、入出力をする変なもの(アクション)がある
関数とアクションは型が違うから、関数を見たらそれが入出力をしないことは保証されてる
859: デフォルトの名無しさん [] 2011/12/25(日) 19:32:00.64 AAS
>>850850(1): デフォルトの名無しさん [sage] 2011/12/25(日) 19:16:51.65 AAS
>>846
モナドは副作用を保証してくれないから、
モナドだけではI/Oは不可能。
副作用をうまく取り扱うための枠組みを、
モナドは提供できているというだけの関係。
>副作用をうまく取り扱うための枠組みを、モナドは提供できている
どこで、なんで、それができてるんや?ちゅうのが知りたいんやな
860(1): デフォルトの名無しさん [sage] 2011/12/25(日) 19:39:14.42 AAS
自分は手下に命令しただけで、直接手を下していないことを
「俺は潔白だ」
というようなものだな。
MLのように自分が手を下した範囲をちゃんと自供するほうが
ずっと罪は軽い。
861(1): デフォルトの名無しさん [sage] 2011/12/25(日) 19:41:31.09 AAS
IO aをRealWorld -> (a,RealWorld)とみなした上で外延性から
∀ x :: IO a, ∃s.s' :: RealWorld. x s /= x s'について解釈することで参照透明性をもう少し厳密に言えないのかな
862: デフォルトの名無しさん [sage] 2011/12/25(日) 19:45:03.85 AAS
RealWorld型を導入しなくても参照透明にはなるよ
IO a型の値をプリミティブにしたって良いし
863: [―{}@{}@{}-] デフォルトの名無しさん [sage] 2011/12/25(日) 19:45:45.33 AAS
>>860
実際にコードを読んだり(自動でも手動でも)最適化する場合に
直接手を下しているかどうかが重要になるんだから仕方ない
864(1): デフォルトの名無しさん [sage] 2011/12/25(日) 19:48:09.17 AAS
Moggiが表示的意味論(もちろんI/O、状態、並列などが扱われている)で
使われている技法に共通構造を見出した。
それがどんな構造かってのは、数学分からない人には、絶対に演繹的に理解できないです。
数々のMonadを体得することで帰納的に理解してください。
帰納的な理解だから身体動かさないと無理です。
頑張ってMonad入門を読みこなして、さらにプログラムを書いてください。
865: デフォルトの名無しさん [sage] 2011/12/25(日) 20:02:04.02 AAS
茂木=サン
866: デフォルトの名無しさん [sage] 2011/12/25(日) 20:21:29.09 AAS
継続やストリームを使ったIOの表現よりも、
モナドを使ったIOの表現の方がシンプルで、処理を追いやすい
IOモナドが作られた理由はこれに尽きるだろ
867(3): デフォルトの名無しさん [] 2011/12/25(日) 20:21:39.10 AAS
>>858 >>864
ああ、また見捨てられてしもた。いっつもこうや。わしに学がないばっかりに。
ふつうのプログラムはやってるから、あのIOやエラーは知ってるし、
Maybeなんちゅうのがあるらしいのも知ってるけど、そんなんじゃ
話がわからんちゅうこっちゃろな。
Monad入門ってどこにあるんですか?
今日は冷えるわ。
868: デフォルトの名無しさん [] 2011/12/25(日) 20:27:46.78 AAS
>>861
問題意識がおもしろそう。
参照透明性が厳密に表現できると、モナドも厳密に表現できるのでは
という動機?
869: デフォルトの名無しさん [sage] 2011/12/25(日) 20:36:19.03 AAS
IOモナドに関してはこれがいい。
特にボトムアップで理解したい人。実装について触れられてる。
外部リンク:haskell.org
870: デフォルトの名無しさん [] 2011/12/25(日) 20:50:43.45 AAS
>>867
俺も学の無い人間だけど、モナドはOOPでいうインターフェースに当たる型クラスって機能を使って構築されてるって言えば何をしたいものか大体わかる?
871: デフォルトの名無しさん [sage] 2011/12/25(日) 21:58:46.16 AAS
Haskell で GUI のアプリ作った・作ってる人っている?
872(1): デフォルトの名無しさん [sage] 2011/12/25(日) 22:04:17.40 AAS
XMonadの拡張なら
873(1): [―{}@{}@{}-] デフォルトの名無しさん [sage] 2011/12/25(日) 22:10:00.15 AAS
オセロなら
874: デフォルトの名無しさん [sage] 2011/12/25(日) 23:04:12.41 AAS
>>872,873
Haskell でも MVC や Doc-View アーキテクチャが基本なの?
Model あるいは Doc の部分ってどうやって実装してる?
やっぱり IORef のようなミュータブルな IO モナドになっちゃうのかな
875: [―{}@{}@{}-] 873 [sage] 2011/12/25(日) 23:14:40.98 AAS
MVCっぽい感じだった
モデルにはMVar使ってた
876(1): デフォルトの名無しさん [sage] 2011/12/25(日) 23:39:17.99 AAS
ちゃんと教えてあげなよ。
>>867
Schemeになるが、Semantic Lego
外部リンク[2885]:citeseer.ist.psu.edu
上下前次1-新書関写板覧索設栞歴
あと 102 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.015s