[過去ログ] 関数型プログラミング言語Haskell Part16 (978レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
804(1): デフォルトの名無しさん [sage] 2011/12/23(金) 18:53:48.59 AAS
>>802802(2): デフォルトの名無しさん [sage] 2011/12/23(金) 18:32:22.82 AAS
>>797
それってオブジェクト指向でメソッドの引数の型を
IO型からObject型にするのと、どう違うの?
色んなものの「共通する性質」や「共通する関係」を抜き出し、
具体的な実態では無くその性質や関係のみで以て語るのが「抽象化」だから、
抽象化するという意味は同じ
どう抽象化するかという点で、IO型からObject型へとMonadへとで違いがでる
Haskell のモナドは (m を Monad クラスのインスタンスとして)
forall a b. m a -> (a -> m b) -> m b
forall a b. m a -> m b -> m b
a -> m a
String -> m a
という4つの「演算で抽象化」してる(うち2つだけで十分だが)
特にモナド同士の演算がまたモナドになるという性質と、
モナドの外からはモナドの具体的な実態は見えないという性質が特徴的だから、
そういう性質が活かせるところでもてはやされる
オブジェクト指向のObject型がどういう性質の抽象化なのかは忘れた
805: デフォルトの名無しさん [sage] 2011/12/23(金) 18:59:26.87 AAS
なんかHaskellPlatform DLできないんだけど鯖どうなってんこれ
806: デフォルトの名無しさん [] 2011/12/23(金) 19:27:53.45 AAS
>>799ありがとう。読んでみる。
807(1): デフォルトの名無しさん [sage] 2011/12/23(金) 19:37:49.40 AAS
>>802
その例だと、内部でやってることもだいたい同じ
実際の型に応じて実装が選ばれる
実装を選ぶタイミングがコンパイル時か実行時かは違う
型クラスは ad-hoc polymorphism を使いやすくしたものでオーバーロードの親戚
OOPのほうはsubtype polymorphismといって、部分かなり違う部分がある
例えばsubtype relationが推移律をみたすみたいな強い性質がある
subtypeがあるとどうなるかは、Scalaが壮大な社会実験中
808: デフォルトの名無しさん [sage] 2011/12/23(金) 20:08:50.39 AAS
Objectにしたらキャストがいるよね
interface Monadみたいの定義しないと
809(1): デフォルトの名無しさん [sage] 2011/12/23(金) 21:29:18.89 AAS
抽象化と言うか普遍化だな。
810: デフォルトの名無しさん [sage] 2011/12/23(金) 21:51:15.90 AAS
同じ事やねんで
811(1): デフォルトの名無しさん [] 2011/12/23(金) 21:51:38.33 AAS
モナドって、ひょっとしてHaskellにおけるデザインパターンのことかい?
812: デフォルトの名無しさん [] 2011/12/23(金) 21:52:28.95 AAS
>>809
ラムダ抽象の抽象?
813(1): デフォルトの名無しさん [sage] 2011/12/23(金) 21:58:23.43 AAS
>>811
モナドの方が抽象度高いけど似たようなもん(だと思ってる)
814: デフォルトの名無しさん [sage] 2011/12/23(金) 21:59:35.27 AAS
普遍化というのはある特定の性質から全体の性質が定まるようにすることで、
単なる抽象化とは違うだろ。
815(1): デフォルトの名無しさん [sage] 2011/12/23(金) 22:03:10.73 AAS
デザインパターンが何を指しているのかわからない。
816(1): デフォルトの名無しさん [sage] 2011/12/23(金) 22:04:44.75 AAS
【普遍化】個別的・特殊なものを捨て、共通なものをとり出すことによって概念や法則などを引き出すこと。
【抽象化】対象から注目すべき要素を重点的に抜き出して他は無視すること。
817: デフォルトの名無しさん [sage] 2011/12/23(金) 22:14:01.93 AAS
よかったな。
818(1): デフォルトの名無しさん [sage] 2011/12/23(金) 22:21:35.79 AAS
どっちでも良いと思うけど、性質を式にするような場合は一般化(普遍化)のほうがしっくるくるよね
819(1): デフォルトの名無しさん [] 2011/12/23(金) 22:31:42.28 AAS
>>815
あのGoFのデザインパターンがその代表だが。
>>813
そうか。そうならデザインパターンと同じくつまらんものだ。
長くは続かん。
>>816 >>818
もっと乾いた理解をしないといかんのじゃないか?
820(1): デフォルトの名無しさん [sage] 2011/12/23(金) 22:43:16.57 AAS
>>819
> そうか。そうならデザインパターンと同じくつまらんものだ。
> 長くは続かん。
2ch で質問して、たった1個のレスでそんなに早く結論を得た気になるなんて
ほんと馬鹿としか言いようがない
このまま行くと、お前は一生その考えなんだろうなぁ
821: デフォルトの名無しさん [sage] 2011/12/23(金) 22:45:15.16 AAS
そもそもデザインパターンがつまらんという感覚が良く分からない
822: デフォルトの名無しさん [sage] 2011/12/23(金) 23:03:06.92 AAS
うむ。つまるとかつまらんてものではないわな
823: デフォルトの名無しさん [] 2011/12/23(金) 23:04:36.28 AAS
>>820
2ch
824(1): デフォルトの名無しさん [sage] 2011/12/24(土) 00:21:37.64 AAS
つまらない物だということにして安心したいんだよ
そうすれば理解する努力しなくていいから
825(1): デフォルトの名無しさん [sage] 2011/12/24(土) 00:50:28.05 AAS
理解できない自分の頭を嘆く必要もなくなるし。
826: デフォルトの名無しさん [sage] 2011/12/24(土) 05:44:34.49 AAS
>>804 , >>807
ありがとう。
でも、その理屈でIO()をモナドに抽象できるのだとすると、
「IO()で提供されていた種々の関数は全て、
モナドで提供されている演算子に置き換え可能である」
という前提条件が存在すると思うのだけど、どうだろう?
この条件が成立しないと、結局forallはIO()型の値を必要とするよね。
IO()をMonad m=>mで置き換え可能であるためには、forallを使っている
コードも含めて、IO()型に関連する「全ての関数」のモナド版を
用意してあげなくちゃいけないと思うのだけど。
827(1): デフォルトの名無しさん [sage] 2011/12/24(土) 08:41:32.68 AAS
>>=, returnとそれと対応するIO版の関数の範囲に限ってその前提条件は成立する。
それが型クラスとそのインスタンス宣言の意味するところで、
この前提条件の表明がMonad m =>みたいな型シグニチャのコンテキスト。
828: デフォルトの名無しさん [sage] 2011/12/24(土) 08:55:33.85 AAS
>827の翻訳
一般にその前提条件は成立しない。
上下前次1-新書関写板覧索設栞歴
あと 150 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.023s