- 1 名前:デフォルトの名無しさん mailto:sage [2005/09/30(金) 01:34:05 ]
- C/C++>>>>(越えられない壁)>>>Haskell
- 751 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 00:29:30 ]
- >>750
ttp://cvs.haskell.org/Hugs/pages/users_guide/here-documents.html
- 752 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 20:07:34 ]
- >>733
くわしくはこのページが参考になる。 ttp://d.hatena.ne.jp/m-hiyama-memo/searchdiary?word=*%5B%A5%E2%A5%CA%A5%C9%5D John Power & Edmund Robinsonによれば: * TのKleisli圏C_Tがプレモノイド圏となる ⇔ Tは強度を持つ * TのKleisli圏C_Tがモノイド圏となる ⇔ Tは可換強度を持つ これはKleisli圏のプレモノイド構造と強度が1対1に対応しているということで、モノイド圏では都合が良くない。つまり、 プレモノイド圏となる⇒・・・⇒モナドの作用乗法 というのがwell-definedになるということを狙ってる。たしかにモナドって数学的な基礎知識無しでも使えると確信しましたか?
- 753 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 20:44:58 ]
- 当然だけど、アローについても同様の議論が展開できる訳です。まあ、アローなんかどうでも良いんでしたね。
- 754 名前:デフォルトの名無しさん [2008/01/07(月) 22:52:18 ]
- モノイド圏とモノイダル圏て何が違うの?
- 755 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 23:07:53 ]
- >>752
乙。>>710あたりが言ってた図を書くって「ペースティング図、スタック図(Santiago graphical notation)、ストリング図で描く・・・」てことか。 おれも>>735みたいなのをアローと思ってたw
- 756 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 23:13:13 ]
- >>754
Monoidal Category = モノイド圏 >>733しかモノイダル圏という日本語は使っていないと思う。普通、モノイド圏と呼ぶ。
- 757 名前:デフォルトの名無しさん [2008/01/07(月) 23:44:59 ]
- >756 thx
ところで、圏でのモナドは分かるんですが、 プログラム言語のモナドって何なんですか?
- 758 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 00:30:05 ]
- 検索しましたら次の資料が見つかり自己解決しました。
www.ipsj.or.jp/07editj/promenade/4703.pdf
- 759 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 00:33:47 ]
- >>757
ほい ttp://www.sampou.org/haskell/tutorial-j/monads.html HaskellのモナドはMonadという型クラスのインスタンスれす。 Monadクラスは2つのクラスメソッドを持っていて、その2つがモナド則(3ホーソクありゅ)を満たしてマース。 よく使うモナドはIO, Maybe, Listあたりでしょう。どれも「演算」を繋ぐという感じに使いマース。 この3行を見たらリンク先にJUMP! 2つのクラスメソッドは、最初のうちは『>>=』が『|』(パイプ)に対応、『return』が『cat』に対応すると覚えておけば良いかもネ! (Jonesはわざとパイプっぽくしたらしいネ) モナドの構文は3つ。doとletとifだけ。 演算をモナド的に定義して繋ぐと、新しい特徴を参照透過的にモナドに結びつけることが出来ちゃう。 しかもモナド則3が保証するように「組み立て順序が自由」で、長くつながったモナドの鎖のどこを切ってもモナドになるョ。 これがモナドがもたらすモジュール化という効能だよーん。
- 760 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 01:11:34 ]
- >759 おおDankeです
プログラムにはなかなか深い数学が隠れているんですね。 いまふと思ったんですが、物理に出てくる量子化という 概念も、もしかするとモナドに関係あるかも知れません。 モジュラリティが何を意味するのかよく考えてみます。
- 761 名前:デフォルトの名無しさん [2008/01/08(火) 21:02:22 ]
- ここの説明もなかなかおもしろいよ。
blogs.dion.ne.jp/keis/
- 762 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 21:15:53 ]
- >>761
宣伝乙
- 763 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 21:40:15 ]
- >>759
doとletは分かるけど、ifってモナドと関係あったっけ?
- 764 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 23:36:51 ]
- >>761
説明が間違ってるところ大杉。 自分でモナドを作る時、どうするつもりかと思った。
- 765 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 23:45:48 ]
- >>763
do と if を一緒に使う話じゃないかな。有名な「一行で書け」ってやつ。
- 766 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 00:55:16 ]
- >>761
パクったはいいが、意味を理解してなかった、ってところか。
- 767 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 09:22:24 ]
- >>761ってそんなに間違いが多いのか〜
どこからパクったのか分かりますか?
- 768 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 07:49:24 ]
- この年末年始のプログラマの休暇に
ここのスレが結構盛り上がっていたな
- 769 名前:デフォルトの名無しさん [2008/01/13(日) 08:07:15 ]
- プログラマは休暇にHaskellの勉強か
みんな偉いな
- 770 名前:デフォルトの名無しさん [2008/01/13(日) 10:35:26 ]
- どのへんがまちがってるの?
- 771 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 17:53:03 ]
- 勘違いしてるだけなんじゃない?
- 772 名前:デフォルトの名無しさん [2008/01/18(金) 04:18:25 ]
- なんだかんだ言って、本当はぜんぜん分かってない奴がほとんどだろw
- 773 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 09:45:24 ]
- まぁ仲間は多いと思っておきたいところだよな。
- 774 名前:デフォルトの名無しさん [2008/01/18(金) 15:35:54 ]
- >>761の間違いを早く指摘して欲しいもんだなw
- 775 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 15:37:06 ]
- >>774
そういってPV稼ぐ魂胆だろ 自演乙
- 776 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 15:18:10 ]
- こんなとこで宣伝したところで何PV増えるというのか
- 777 名前:デフォルトの名無しさん [2008/01/19(土) 18:53:04 ]
- >>775
そうやって自分が理解できてないのを誤魔化そうって魂胆だろ。 まずは>>761の間違いを指摘してみろよ。話はそれからだなw
- 778 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 21:02:10 ]
- ひとり暴れているのがいるみたいだね。誰も話したくないからって理解できないんだろうか。
- 779 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 13:31:52 ]
- いったいどこからパクったのか教えてくれよ。
- 780 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 13:54:12 ]
- >>779
どうでもいい
- 781 名前:デフォルトの名無しさん [2008/01/20(日) 18:21:29 ]
- どうでもよくないな。それによって>>761が間違いかどうか判断できるだろ。
- 782 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 20:01:14 ]
- その判断がどうでもいいと言っているんだよ
- 783 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 20:35:14 ]
- 1/8を最後にパッタリ流れが止まったのはなぜかな?
- 784 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 20:41:46 ]
- ヒント 自演
- 785 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 04:24:11 ]
- 結局Haskellって遅いの?
- 786 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 22:55:28 ]
- >>785
perlよかハエーよ スクリプトに使うなら無問題 組込系にはちょっと シビアなタイミングが求められるとダメポ
- 787 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 05:51:47 ]
- >>786
>組込系にはちょっと シビアなタイミングが求められるとダメポ 組み込みはどんな感じのアセンブリコードが生成されるのか予測しやすいほうがいいと思うんだが、 Haskell使いが慣れてくるとどういうasm吐くか割と簡単に把握できるようになるの?
- 788 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:33:33 ]
- >>786
Perlよかはやいとか到底考えられないのだけど、その根拠は?
- 789 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:35:05 ]
- >>788
ttp://shootout.alioth.debian.org/sandbox/benchmark.php?test=all&lang=ghc&lang2=perl だと 14 対 1 で Haskell が速い
- 790 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:53:31 ]
- 動的型でバイトコンパイルのPerlと、静的型でネイティブコンパイルのHaskellを比較して
Perlの方が速いと思うなら、そっちこそ説明が要るだろw
- 791 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:00:36 ]
- え〜Haskellって、ネイティブコンパイルしてるのか。それすら知らなかったわw
インタプリタだとばかり思ってた。
- 792 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:10:08 ]
- 両方可能だがね
- 793 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:34:52 ]
- インタプリタあるんだ、知らんかった
コンパイルしなくてもCGIとして使えるのかな 調べてみるか
- 794 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:39:19 ]
- あるかどうかは知らんが、可能ではあるだろう
- 795 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:44:38 ]
- runghcとかrunhugsとかあるけど、インタプリタをサーバに導入するほうが返って面倒な気もする
- 796 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 17:15:57 ]
- >>793
可能だよ
- 797 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:00:27 ]
- Haskellまだかじった程度だけど、参照透明性がなにかハッピーにしてくれるの?
やろうと思えば、既存の言語でも出来るわけで。言語的に制約がかかっているか どうかでしょ。「言語的に制約がかかる」というのは、入門者にとってしかメリット はないよ。 遅延評価も*ほぼ*使わない。無限計算なんてやらんよ? こんなんで、なんで既存言語から乗り換えるの?俺が、まだHaskellよくわかっていない だけ?
- 798 名前:デフォルトの名無しさん [2008/02/16(土) 23:01:19 ]
- あげ
- 799 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:07:18 ]
- 俺も初心者だけど、参照透明性の重用性がよくわからない。
つか、結局はunsafeなんとかで参照透明性をくずしてんでしょ?
- 800 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:08:04 ]
- ちなみにクソリストなんて採用するのはやめてくれ
- 801 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:08:40 ]
- >>797
C++ が参照透明な言語だって知ってた?
- 802 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:10:00 ]
- >>801
信じられない。あふぉかw 俺が、無知なら教えてくださいw
- 803 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:10:31 ]
- >>797
お前、今日のRuby勉強会に行ったやつだろ? なぜ関数プログラミングは重要か www.sampou.org/haskell/article/whyfp.html
- 804 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:11:05 ]
- 参照透明性って、再代入できないってことだよな(間違ったら訂正してくれ)
C++は再代入できる、とおれは思ってるがw
- 805 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:12:01 ]
- >>803
Rubyはすきだが、そいつじゃない。というか、今日一日ひきこもってたしなw
- 806 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:12:04 ]
- >>799
unsafeを使うときは注意が必要である いつ実行されてもプログラムに矛盾が発生しないことがはっきりしない限り使うべきではない
- 807 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:12:29 ]
- 式と値が一対一に対応していること
- 808 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:16:09 ]
- Haskellのメリットを説きたいなら>>803のリンク教えるだけで十分じゃねーの?
- 809 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:16:48 ]
- >>802,804
まずはこれを読んでみてくれ。 d.hatena.ne.jp/w_o/20061008#p1 これが面白いのは、参照透明は程度問題に過ぎないという 視点を得られる所なんだと思っている。
- 810 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:18:09 ]
- 参照透明性なんて飾りだよ
Haskellの魅力は、副作用が禁じられていることじゃなくて、 副作用なんていう扱いにくいものに頼らなくても自然にプログラムを書けることだ 遅延評価は大いに使う 「ほぼ使わない」なんて思えるのはHaskellに慣れてないだけだ 例えば、C言語の典型的なfor文の使い方 for(T i = init; cont(i); i = next(i)) use(i); を、Haskellで自然に書き直すと mapM_ use $ takeWhile cont $ iterate next init になるけど、これは無限リストを使っている
- 811 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:19:34 ]
- >>809
あなたはネタを理解できない人なんですね
- 812 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:23:05 ]
- 遅延評価便利だよ。
MLが不便に思えるぐらいだ。
- 813 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:23:13 ]
- >>811
ドッキリとかを真に受けるタイプの人でしょ? >>809 がネタなんだけどね
- 814 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:26:29 ]
- >>799
unsafeなんとかは、本当は参照透明なのに、コンパイラが参照透明だと見なしてくれない式を書くときに使う そうじゃない使い方もできるけど、それは邪悪な使い方だ
- 815 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:28:06 ]
- ffi使えばunsafe使わなくてもいくらでも邪悪なプログラムが書けるぜ。
- 816 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:28:41 ]
- HaskellのFFIはめちゃくちゃ楽だからな。
組み込みプログラムもなんのその。
- 817 名前:799 mailto:sage [2008/02/16(土) 23:41:48 ]
- >>803 >>808
803のリンクは、 「参照透明は関数型言語の魅力としては不適当」と言っているのでは?
- 818 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:47:33 ]
- >>816
オーバーヘッドもあるしメモリも食いまくるから組み込みには全く向かないだろ
- 819 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:54:08 ]
- >>818
関係ない。 組み込み=低リソースという時代は終わったんだよ。 それよりも、たとえばロケットや自動車のような用途では安全性が求められる。
- 820 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:57:18 ]
- >>817
参照透明でなければ遅延評価は役に立たないよ
- 821 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:00:21 ]
- D 言語に遅延評価もどきはあるけどな。
- 822 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:02:57 ]
- 遅延評価はテクニックに近いものもあるしな
- 823 名前:799 mailto:sage [2008/02/17(日) 00:06:23 ]
- >>820
なるほど…。 でも、遅延評価も必ず使うわけではないし、 (IOの時など遅延評価されては困る場合もあるわけですよね?) なんというか、参照透明そのものの優位性がわからない…。 ・コンパイラが作りやすい? ・数学的にみて美しい? …、いずれも一般ユーザには関係ないですよね…。
- 824 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:07:34 ]
- 参照透明性ってデバッグの容易さの点で重要と聞いてるけど。
- 825 名前:799 mailto:sage [2008/02/17(日) 00:08:33 ]
- >>814
う〜ん…。これは正しいのでしょうか? あくまでも、Haskellは参照透明であって、 そうでないプログラムは邪悪という事ですよね。
- 826 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:11:43 ]
- >>823
参照透明だったら関数の返値をキャッシュできるよ
- 827 名前:799 mailto:sage [2008/02/17(日) 00:14:55 ]
- >>826
コンパイラの話ですよね…。
- 828 名前:799 mailto:sage [2008/02/17(日) 00:16:41 ]
- >>824
Haskellのデバッグってむしろ大変そうですけど…。
- 829 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:18:15 ]
- >>827
完全にキャッシュできればプログラマはわざわざメモ化とかのテクニックを使ってプログラミングする必要がなくなる。 ・・・とは言うものの、GHCでは完全にキャッシュしているわけではない。
- 830 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:19:45 ]
- >>828
Cのデバッグで一番骨が折れるのが型によるバグ。 Haskellはコンパイルさえ通れば型に関しては完全に矛盾がない。
- 831 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:20:48 ]
- >>823
だから、参照透明性はそんなに重大な特徴じゃないんだって (利点が無いわけじゃない。コンパイラによる最適化がやりやすい。コードが読みやすい。リファクタリングしやすいetc) 逆に、「参照透明でないこと」(破壊的代入や副作用を認める)にも大して優位性は無いんだ Haskellにはもっと重要な特徴がたくさんある 動作オブジェクトを利用した入出力とか、代数的データ型+パターン照合とか、型クラスとか、遅延評価とか
- 832 名前:797 mailto:sage [2008/02/17(日) 00:25:59 ]
- >>830
Haskell の型はステキだと思いますよw でも、traceとか「デバッグ」は大変そう…。
- 833 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:29:07 ]
- >>831
>参照透明性はそんなに重大な特徴じゃない そうですよね…。 でも、なんか、かたくなに参照透明性を守ろうとして 余計わかり難くなってる気がするんですよね。 全面的な参照透明性を捨てた方が、 すっきりするのではないでしょうか…?
- 834 名前:799 mailto:sage [2008/02/17(日) 00:29:52 ]
- ↑>>833 は 799です
- 835 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:30:17 ]
- 第15回 Haskellでのデバッグのコツをつかむ
itpro.nikkeibp.co.jp/article/COLUMN/20071204/288630/
- 836 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:30:34 ]
- traceってどういうのを指してるか分からんけど、printfデバッグの類は普通にできる
ただ、HaskellがCよりデバッグしにくいのは事実だと思う gdbに匹敵する使いやすさのデバッガがまだ無いからだが >>833 >でも、なんか、かたくなに参照透明性を守ろうとして >余計わかり難くなってる気がするんですよね。 どの辺でそう感じた?
- 837 名前:799 mailto:sage [2008/02/17(日) 00:31:00 ]
- ああっ!
>>832 も799です。
- 838 名前:799 mailto:sage [2008/02/17(日) 00:35:00 ]
- >>836
> printfデバッグの類は普通にできる そうなんですか? なんかprintfいれるとバグが再現しないとか多そうですが…。 > どの辺でそう感じた? IOモナドww 参照透明性を捨てれば もっとステキな実装がありそうじゃないですか?
- 839 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:38:46 ]
- 参照透明性を確保するために導入したんだから
本末転倒だじょ
- 840 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:41:05 ]
- 俺はIOモナド大好きなのでその気持ちは良く分からん
例え参照透明性を捨ててもIOモナドは使いたい
- 841 名前:799 mailto:sage [2008/02/17(日) 00:41:50 ]
- >>839
ん? いや、だから、参照透明性に固執するから、 IOモナドなんて理解しにくい方法で実装してるんでしょ?
- 842 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:43:33 ]
- 参照透明性を実現する完全に純粋な関数型言語を作るのが
Haskell の1つの目標だったんじゃないのか?
- 843 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:50:41 ]
- IOモナド、というかIO動作の考え方は多少とっつきにくいけど、分かってしまえば簡単なことだし、
副作用を使った入出力よりずっとまともだと思う それから、遅延評価の言語で素朴に副作用を使うと実行順が制御困難になるけど、 IO動作ならこの問題がない >>842 だろうな でも言語のユーザーにとってはそんな目標はどうでも良い
- 844 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:51:38 ]
- 参照透明性が要らないというなら OCaml とか他の言語使えばいい。
それだけだと思うぜ。
- 845 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 01:00:20 ]
- >>844
その議論はおかしい Haskellの特徴は参照透明性だけじゃない デフォルトの遅延評価も型クラスもIOモナドも$演算子もOCamlには無い 参照透明性なんてどうでも良いという奴にでも、Haskellを使う理由はいくらでもある
- 846 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 01:09:14 ]
- じゃあ、参照透明性の無いHaskell に相当する言語を作ったらいいんじゃね。
- 847 名前:799 mailto:sage [2008/02/17(日) 01:12:57 ]
- >>840
そうなんですか…。 結局、慣れの問題なんでしょうかねぇ…。
- 848 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 01:15:01 ]
- Haskell では参照透明性をくずすものは trace のみなんだっけ?
- 849 名前:799 mailto:sage [2008/02/17(日) 01:15:23 ]
- >>846
まさに、そう、思うんですよw そんな言語があれば、 確実にブレイクするのではないでしょうか? 誰か作って!私はもちろん……ムリ!
- 850 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 01:26:25 ]
- >>848
unsafePerformIOってのがある >>849 単に参照透明性のないHaskellならunsafePerformIOを言語の一部として認めれば良いんだけど、 IOモナドを排除するのは難しいと思う >>843で書いたけど、普通の言語にあるような副作用による入出力は、遅延評価と相性が悪い 実行順を分かり易く制御するには、結局、IOモナドか、Cleanの一意型か、 それに代わる何か新しいメカニズムが必要になる
- 851 名前:799 mailto:sage [2008/02/17(日) 01:39:54 ]
- >>850
な〜るほど! ひょっとしてunsafePerformIOを使いまくって >>814 の言う邪悪なIOライブラリを作れば、 Haskellのままでもいいかもしれませんねw
|

|