[過去ログ]
関数型プログラミング言語Haskell Part16 (978レス)
関数型プログラミング言語Haskell Part16 http://echo.5ch.net/test/read.cgi/tech/1317958045/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
837: デフォルトの名無しさん [sage] 2011/12/25(日) 12:07:45.95 アレをコーティングして入れてました http://echo.5ch.net/test/read.cgi/tech/1317958045/837
838: デフォルトの名無しさん [sage] 2011/12/25(日) 18:07:33.55 >>835 IO Monadをかぶせて副作用なし。 http://echo.5ch.net/test/read.cgi/tech/1317958045/838
839: デフォルトの名無しさん [] 2011/12/25(日) 18:31:48.82 いろいろ見てみたけどモナドってやっぱおれには難しいわ。 なんか純粋な関数型言語にふつうのプログラミング言語ならふつうにできることを 組み込みたいという空気かなと思うが、あまりそう強調されてもいないようだし、 まず目的がようわからんわ。 抽象化とか言うけど、それはモナドに限らん関数型の特徴だと思うし。 だれかこういうのちょっと教えてくれんかなスマンが。 http://echo.5ch.net/test/read.cgi/tech/1317958045/839
840: デフォルトの名無しさん [sage] 2011/12/25(日) 18:41:00.60 「こういうの」って何だ? 具体的に訊いてくれ http://echo.5ch.net/test/read.cgi/tech/1317958045/840
841: [―{}@{}@{}-] デフォルトの名無しさん [sage] 2011/12/25(日) 18:48:48.79 まずモナドとIOモナドを区別してくれ 純粋さを保ったまま入出力をする仕組みがHaskellにはあって、IOという名前の型が使われる モナドというのはある種の型を抽象的に扱う枠組み (どういう型をどうやって扱うのかは一言では説明できない) で、IOはたまたまモナドの枠組に適合する(ので、IOモナドと呼ばれる) で、モナドが知りたいの?IOが知りたいの? http://echo.5ch.net/test/read.cgi/tech/1317958045/841
842: デフォルトの名無しさん [sage] 2011/12/25(日) 18:51:02.48 関数に副作用があるかどうかが型を見るだけで解るのは利点 http://echo.5ch.net/test/read.cgi/tech/1317958045/842
843: デフォルトの名無しさん [sage] 2011/12/25(日) 19:00:41.02 チューしようか http://echo.5ch.net/test/read.cgi/tech/1317958045/843
844: デフォルトの名無しさん [] 2011/12/25(日) 19:03:59.38 すぐ反応してくれてうれしいな >>840 モナドでやりたいことは何なの?ってことなんだが。 関数型にどうのこうのって書いたんだが、そういう「目的」っていうの? そういうのが知りたいんだが。 いろんなモナドがあるようなんで、それがわかいにくいんだが。 >>841 IOモナドはモナドのひとつじゃないん? その「純粋さを保ったまま入出力をする仕組み」がモナドなんやろ? 純粋さって関数型のってこと?もしそうなら、どの程度保てるものなの? 知りたいのはモナド。IOがその代表ならそれも知りたい。 >>842 それは型指定を工夫したらできるんじゃないん? こんな質問じゃったんじゃが、みなスマンのう http://echo.5ch.net/test/read.cgi/tech/1317958045/844
845: デフォルトの名無しさん [sage] 2011/12/25(日) 19:04:09.30 IO がモナドで表現されるようになった経緯は、 「A History of Haskell」の Section 7 に詳しく書かれている http://research.microsoft.com/en-us/um/people/simonpj/papers/history-of-haskell/ http://echo.5ch.net/test/read.cgi/tech/1317958045/845
846: デフォルトの名無しさん [sage] 2011/12/25(日) 19:05:37.16 >>841 > で、IOはたまたまモナドの枠組に適合する(ので、IOモナドと呼ばれる) なるほど。 いつまでもIOモナドは難しいと言われ続ける理由がわかったよ。 本当にIOモナドは「たまたま」モナドの枠組みに適合してるの? わざわざモナドとしての宣言をしているのを「たまたま」というの? わざわざ色々なIOをモナド則にあわせて整理して宣言しているのを 「たまたま」とか言って誤魔化しているわけでしょ。 学ぶ人達の能力を信用していないから、そうやって誤魔化すわけだ。 そうやって学ぶ人達を信用せずに、ありのままを伝えず、 取って着けたようなすぐバレるデッチアゲばかり言うから、 学ぶ人達はどの言葉を信用すればいいかわからなくなって、 「Haskellは難しい」という結論になっているんじゃないの? http://echo.5ch.net/test/read.cgi/tech/1317958045/846
847: [―{}@{}@{}-] デフォルトの名無しさん [sage] 2011/12/25(日) 19:10:26.88 >>844 >IOモナドはモナドのひとつじゃないん? そうだよ >その「純粋さを保ったまま入出力をする仕組み」がモナドなんやろ? IOモナドがその仕組み。それ以外のモナドは全然別のことをする(構文解析とか) >純粋さって関数型のってこと?もしそうなら、どの程度保てるものなの? 副作用のある関数を一切使わずに入出力のあるプログラムが書ける http://echo.5ch.net/test/read.cgi/tech/1317958045/847
848: デフォルトの名無しさん [sage] 2011/12/25(日) 19:10:45.98 モナド則が { nop foo bar baz nop } みたいなのを正しく扱うのに都合がいいということはわかる http://echo.5ch.net/test/read.cgi/tech/1317958045/848
849: デフォルトの名無しさん [sage] 2011/12/25(日) 19:12:41.64 >>847 > 副作用のある関数を一切使わずに ダウト。Haskell上の値としては副作用はないが、 裏でランタイムがちゃんと副作用を起こしている。 http://echo.5ch.net/test/read.cgi/tech/1317958045/849
850: デフォルトの名無しさん [sage] 2011/12/25(日) 19:16:51.65 >>846 モナドは副作用を保証してくれないから、 モナドだけではI/Oは不可能。 副作用をうまく取り扱うための枠組みを、 モナドは提供できているというだけの関係。 http://echo.5ch.net/test/read.cgi/tech/1317958045/850
851: デフォルトの名無しさん [sage] 2011/12/25(日) 19:16:52.65 厳密には何を以て副作用と言うかを(ここだけでも)統一されて議論すべきだが、 「Haskell上の値としては副作用はない」というのを副作用が無いと認識している Haskell プログラマは多いし、暗黙の了解になっていたりもする http://echo.5ch.net/test/read.cgi/tech/1317958045/851
852: [―{}@{}@{}-] デフォルトの名無しさん [sage] 2011/12/25(日) 19:16:53.25 >>846 なんか誤解してるような気がする 1. IOは、純粋さを保ったまま入出力するための型である 2. IOはMonadのインスタンスである この二つの事実が両方成り立つのは別に必然ではないという意味で「たまたま」と言った モナドにならない型で入出力を表現することはできる(ストリームIOとか)し、 入出力と関係ないモナドももちろんある つまりHaskellの入出力を理解するのにモナドを知っている必要はないし、(助けにはなるが) モナドを理解するのにIOを知っている必要もない(助けにはなるが) http://echo.5ch.net/test/read.cgi/tech/1317958045/852
853: デフォルトの名無しさん [sage] 2011/12/25(日) 19:16:55.59 いや、それはおかしいだろ OCamlで実装されたHaskellインタプリタだったらそのHaskellは純粋ではないことになるのか? http://echo.5ch.net/test/read.cgi/tech/1317958045/853
854: デフォルトの名無しさん [sage] 2011/12/25(日) 19:17:44.83 >>853は>>849宛 http://echo.5ch.net/test/read.cgi/tech/1317958045/854
855: [―{}@{}@{}-] デフォルトの名無しさん [sage] 2011/12/25(日) 19:18:27.47 >>849 そこを気にするなら、「副作用のある関数」を 「呼ばれて評価されたときに副作用を起こす関数」と読み替えてくれ http://echo.5ch.net/test/read.cgi/tech/1317958045/855
856: デフォルトの名無しさん [] 2011/12/25(日) 19:21:55.56 >>845 ありがと。ちょっと見てみるけどおれにはわからんだろな >>846 怒らんで >>847 >それ以外のモナドは全然別のことをする うん。そのときの共通性っていうの?それが知りたいんやが >副作用のある関数を一切使わずに入出力のあるプログラムが書ける ほんま?そんなことできるわけないやろ。なんかトリックなんやろ? http://echo.5ch.net/test/read.cgi/tech/1317958045/856
857: デフォルトの名無しさん [] 2011/12/25(日) 19:25:40.76 >849 から >>855 わ。レスポンスしたら他の兄さんらの難しい議論が始まって付いていけへん。 しばらく勉強や。 http://echo.5ch.net/test/read.cgi/tech/1317958045/857
858: [―{}@{}@{}-] デフォルトの名無しさん [sage] 2011/12/25(日) 19:30:01.84 >>856 >うん。そのときの共通性っていうの?それが知りたいんやが モナドの具体例(2〜3個)を知らない人に説明するのは難しい。俺にはできない >ほんま?そんなことできるわけないやろ。なんかトリックなんやろ? うん。おおさっぱに言うと、入出力をする関数がない代わりに、入出力をする変なもの(アクション)がある 関数とアクションは型が違うから、関数を見たらそれが入出力をしないことは保証されてる http://echo.5ch.net/test/read.cgi/tech/1317958045/858
859: デフォルトの名無しさん [] 2011/12/25(日) 19:32:00.64 >>850 >副作用をうまく取り扱うための枠組みを、モナドは提供できている どこで、なんで、それができてるんや?ちゅうのが知りたいんやな http://echo.5ch.net/test/read.cgi/tech/1317958045/859
860: デフォルトの名無しさん [sage] 2011/12/25(日) 19:39:14.42 自分は手下に命令しただけで、直接手を下していないことを 「俺は潔白だ」 というようなものだな。 MLのように自分が手を下した範囲をちゃんと自供するほうが ずっと罪は軽い。 http://echo.5ch.net/test/read.cgi/tech/1317958045/860
861: デフォルトの名無しさん [sage] 2011/12/25(日) 19:41:31.09 IO aをRealWorld -> (a,RealWorld)とみなした上で外延性から ∀ x :: IO a, ∃s.s' :: RealWorld. x s /= x s'について解釈することで参照透明性をもう少し厳密に言えないのかな http://echo.5ch.net/test/read.cgi/tech/1317958045/861
862: デフォルトの名無しさん [sage] 2011/12/25(日) 19:45:03.85 RealWorld型を導入しなくても参照透明にはなるよ IO a型の値をプリミティブにしたって良いし http://echo.5ch.net/test/read.cgi/tech/1317958045/862
863: [―{}@{}@{}-] デフォルトの名無しさん [sage] 2011/12/25(日) 19:45:45.33 >>860 実際にコードを読んだり(自動でも手動でも)最適化する場合に 直接手を下しているかどうかが重要になるんだから仕方ない http://echo.5ch.net/test/read.cgi/tech/1317958045/863
864: デフォルトの名無しさん [sage] 2011/12/25(日) 19:48:09.17 Moggiが表示的意味論(もちろんI/O、状態、並列などが扱われている)で 使われている技法に共通構造を見出した。 それがどんな構造かってのは、数学分からない人には、絶対に演繹的に理解できないです。 数々のMonadを体得することで帰納的に理解してください。 帰納的な理解だから身体動かさないと無理です。 頑張ってMonad入門を読みこなして、さらにプログラムを書いてください。 http://echo.5ch.net/test/read.cgi/tech/1317958045/864
865: デフォルトの名無しさん [sage] 2011/12/25(日) 20:02:04.02 茂木=サン http://echo.5ch.net/test/read.cgi/tech/1317958045/865
866: デフォルトの名無しさん [sage] 2011/12/25(日) 20:21:29.09 継続やストリームを使ったIOの表現よりも、 モナドを使ったIOの表現の方がシンプルで、処理を追いやすい IOモナドが作られた理由はこれに尽きるだろ http://echo.5ch.net/test/read.cgi/tech/1317958045/866
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 112 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.017s