1 名前:潜伏していた1 mailto:sage [02/02/16 16:55] 何とか生き残れました。 前スレ pc.2ch.net/test/read.cgi/tech/996131288/l50 関連 >>2 以降
624 名前:遅報 mailto:sage [03/06/02 00:56] ghc major version up
625 名前:デフォルトの名無しさん mailto:sage [03/06/02 06:41] 6.0の目玉はTemplateということになるのかな? www.haskell.org/ghc/docs/6.0/html/users_guide/template-haskell.html
626 名前:デフォルトの名無しさん mailto:sage [03/06/02 17:06] 教えて君で申し訳ないのですけど、他の関数型言語と比べて Haskell のどのあたりが (・∀・)イイ! or (゚д゚)マズー なのですか? できれば、いい面と悪い面の両方を聞いてみたいです。
627 名前:デフォルトの名無しさん mailto:sage [03/06/02 17:37] >>626 (・∀・)イイ! 実装がいくつかある。 (゚д゚)マズー 末尾再帰じゃない。
628 名前:デフォルトの名無しさん mailto:sage [03/06/02 17:45] ○:数少ない遅延評価な言語の一つ △:clean は遅延/正格の切替えができるらしいが、Haskellは…
629 名前:デフォルトの名無しさん mailto:sage [03/06/02 18:58] >>627 実装がいくつかある。 SchemeやSMLも実装はいくつかあるが。 個々の実装の間に互換性がなければ、却って混乱するのでは?
630 名前:Lazy eva. [03/06/02 21:31] call by need 必要なら呼んで
631 名前:デフォルトの名無しさん mailto:sage [03/06/02 21:39] >>627 >(゚д゚)マズー >末尾再帰じゃない。 lazyだと末尾の最適化はいらないんじゃなかった? おれが勘違いしてるのかも知れないけど
632 名前:デフォルトの名無しさん mailto:sage [03/06/03 10:04] (´-`).。oO( Haskell の (・∀・)イイ! 点がこの程度しか挙がらなくていいのだろうか)
633 名前:デフォルトの名無しさん mailto:sage [03/06/03 22:56] いいところ: 純粋な関数型言語 厳格な型チェック 比較的豊富なライブラリ 遅延評価 わるいところ: 遅い flatなarrayが無い
634 名前:デフォルトの名無しさん mailto:sage [03/06/07 03:00] スレの伸びが lazy ...
635 名前:デフォルトの名無しさん mailto:sage [03/06/07 23:24] >>634 …実はこのスレの定義は既にすべて準備されていて、誰かが問いを放つとレスが見えるようになる?
636 名前:デフォルトの名無しさん mailto:sage [03/06/09 12:38] Haskell: The Craft of Functional Programming これの新しいバージョンがでるっていううわさは本当なの? Ruby系サイトのどこかで書いてあった気がするのだけど。
637 名前:デフォルトの名無しさん mailto:sage [03/06/09 13:06] www.amazon.co.jp/exec/obidos/search-handle-form/249-3518664-2502769
638 名前:637 mailto:sage [03/06/09 13:07] あ、だめだった。Amazonで検索すれ。
639 名前:デフォルトの名無しさん mailto:sage [03/06/09 22:20] >>635 逆かも? 問いが放たれてから、必要に応じて定義を考える。
640 名前:デフォルトの名無しさん [03/06/11 00:32] 問に対して常に同じ答えが返ってきます。
641 名前:デフォルトの名無しさん mailto:sage [03/06/11 09:51] 文脈が変っていても同じ質問に対しては同じ答えが返ってきます。
642 名前:デフォルトの名無しさん mailto:sage [03/06/11 09:52] >>640 問いの系列がmonadな演算で関連付けられてるので、 単独の問いに対しては当てはまらないカモッ!
643 名前:デフォルトの名無しさん [03/06/12 18:05] >>641 それではガイシュツ処理が出来ませんので、 不具合発生です。
644 名前:モナd mailto:sage [03/06/16 12:58] ΛΛ (´d`) .。o〇(monad∈モナー?)
645 名前:デフォルトの名無しさん [03/06/17 18:46] モナドは、人間から見て、副作用を扱ってるコードとほとんど 同じように見える。 人間にとって副作用のあるコードと同じように見えてる とすれば、モナドって何の意味があるの? 人間が関数プログラミングしやすくするために副作用が 禁止されてるんじゃ無かったの?
646 名前:デフォルトの名無しさん mailto:sage [03/06/17 18:51] 「ある」と「あるように見えるけどない」は違うだろ…
647 名前:_ mailto:sage [03/06/17 18:53] homepage.mac.com/hiroyuki44/
648 名前:デフォルトの名無しさん [03/06/17 18:55] >>646 違うけど、プログラマから見て同じように見えてるんだったら プログラマにとっては同じでは? コンパイラにとっての意味しかないのですか?
649 名前:デフォルトの名無しさん mailto:sage [03/06/17 20:07] 関数型の場合、コンパイラにとっては「ない」方が都合がいいけど、 人間にとってはあなたの言う通りあるように見えた方が扱いよいわけだ。 で、「ない」ものをあるように見せるモナドは、便利ってことにならない? それならモドキじゃなくて本物の副作用を認めてもいいじゃんという話はまた別
650 名前:デフォルトの名無しさん [03/06/17 20:29] >>649 > 人間にとってはあなたの言う通りあるように見えた方が扱いよいわけだ。 それは関数プログラミングに反するから、関数プログラミング の立場から見た場合、扱いが良いとは言えないんじゃないですか?
651 名前:デフォルトの名無しさん mailto:sage [03/06/17 20:29] 話が逆なんじゃないか?モナドは副作用をわざわざあるように見せるためのものでもないだろう。
652 名前:デフォルトの名無しさん mailto:sage [03/06/19 21:09] a <- hoge ってやったら、あとは a は見るからに完全に副作用の無い 関数型プログラミングであつかうわけだから、 モナドがあるおかげで関数型の意味がなくなるなんてことは全然無い。 結局モナドって、 副作用や、コードを書いた時点では決まらないものを 普通の関数の引数なんかにつかって破綻するのをさけるために、 型の前にMとかつけてそのままじゃつかえなくする仕組みでしょう。
653 名前:デフォルトの名無しさん [03/06/24 08:16] 日本語扱えるhaskellの処理系ってありますか?
654 名前:デフォルトの名無しさん [03/06/24 09:06] いやらしいリンク集作った homepage3.nifty.com/coco-nut/
655 名前:デフォルトの名無しさん [03/06/26 07:32] Haskellはじめますた。 面白いですね〜 ・リストの内包表現に萌えた ・無限データ構造萌え numForm n = n : numForm (n+1) とか。 あるもんをあるように書いたらいいって言うのがすどい。 詳しい方々、わかんないことがあったら教えてください。 アフォなんですが何とかがんばって基本を理解してから、 モナドを通って詳しい皆さんのところにゆきつきますので。 いまは、組み込み関数?を調べるのに困ってたりします。 IntをDoubleに変換するのってどうするの? IntとIntegerの変換どうするんでうか? とか、わからん。 「**」が解らなくて困ってた事も。 (-1)で懲りて、あらゆるところに括弧つけまくりのコードを書いてたり。
656 名前:デフォルトの名無しさん [03/06/27 10:48] >>655 fromIntegral :: forall b a. (Num b, Integral a) => a -> b toInteger :: forall a. (Integral a) => a -> Integer fromInteger :: forall a. (Num a) => Integer -> a
657 名前:デフォルトの名無しさん mailto:sage [03/06/27 13:05] 今年もICFPの時期が来ましたがみなさんいかがお過ごしですか?
658 名前:デフォルトの名無しさん mailto:sage [03/06/28 13:34] >>655 $をつかうと f (g (h x)) みたいなのを f $ g $ h x とかけて括弧削減。
659 名前:デフォルトの名無しさん [03/06/29 21:21] 初心者質問いいですか? GHCで、API、例えばIsDBCSLeadByte Char -> Bool を使いたいと思ったらどうすればいいのでしょう
660 名前:貧乏脱出!これであなたはお金持ち mailto:sage [03/06/29 21:30] 普通に働いてお金持ちになれるのは全体の1%のみって本当!? 本当にお金持ちになるにはやはり「副収入」が必要! 一日30分 おうちでコピペ、コピペ! 嘘だと思うんならランキング見てみてくださいよ↓↓ (直リン不可) www.adultshoping.com/addclickport.cgi?pid=1053353765 (直リン不可) ///////.......///////////////////////////
661 名前:デフォルトの名無しさん mailto:sage [03/06/29 22:10] 誤解があるようだが、モナドは純粋な関数型言語が 手続き風にコードを書くためのシンタックストリックに過ぎない。 拡張でもなんでもない。 (もちろんシーケンシャルのオプションと使われることが多いわけだが)
662 名前:デフォルトの名無しさん [03/06/29 22:22] _,..............._,....... ,ノ⌒::::::::::::::::::::::::::::::::::::⌒ヽ_ _ノ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ヾ、 (::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::) _ノ:::::::::::::::;ヘ::::::::::ノ⌒ヽ:::::::::::::::::::::::::::::::::) (::::::::::::::::::/  ̄ , ‐-、 |::::::::::::::::::::::::::::::::) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (:::::::::::::/ヽj _/ -‐-、 |::::::::::::::::::::::::::::::::) | トリックだ。 ):::::::::ヾllli_、_,;iiiillllllllli <::::::;へ:::::::::::::::::( | (::::::::::::/`i´ ,└=゚'┘ |::::| 6 |:::::::::::::::::::} < 副作用があるように見えているに `〜、 ゝ| _コ、_、 /|::::| ソ/::::::::::;〜" | 過ぎん。 ヾ|||ll|||||||||||l〉| 三ー'〜〜" | |||:二三|||| l ,三 ヽ、 \______________ |l ⌒ ||| :// ヽ=、-、_ |l、:( : : ||/ / ヽ, |  ̄\ /  ̄ / ノ / \
663 名前:デフォルトの名無しさん mailto:sage [03/06/29 22:37] サータン,サータン!
664 名前:デフォルトの名無しさん mailto:sage [03/06/30 00:06] ところで、日本語訳のページが見れなくないですか??
665 名前:デフォルトの名無しさん [03/06/30 02:53] >>659 わかるひといませんか〜
666 名前:デフォルトの名無しさん mailto:sage [03/06/30 07:59] >>664 www.sampou.org/haskell ならサーバマシンの調子が悪いそうです
667 名前:デフォルトの名無しさん mailto:sage [03/06/30 18:04] >>666 復活したようです。 >>665 いないんじゃないですか。人少なそうだし。 俺は、外界との繋がりはsystem :: String -> IO ExitCodeくらいしか知らない。
668 名前:659=665 mailto:sage [03/07/02 07:35] 検索の結果、MessageBoxを呼んでいる例は見つけました。(真似たらできました) でも、*.hiをバイナリ検索しても、IsDBCSLeadByteはインポートされて無いようです。 (CharNextとか、代用できそうなAPIも同様) これは、Haskellで全角文字を扱うなというお告げでしょうか…
669 名前:デフォルトの名無しさん mailto:sage [03/07/02 08:58] >>668 IsDBCSLeadByteってwindowsのAPI? そういうものはそのライブラリとリンクしてつかうんじゃないのかな。 haskellに入ってるわけがないというか。 www.haskell.org/libraries/ のInterfacing with other Languages and Systemsとか。
670 名前:デフォルトの名無しさん [03/07/02 13:46] >>668 >(真似たらできました) おー、あなたも私から見たらすどい。 よろしければ、MessageBoxを出すコードをこのスレに張って 共有していただければありがたいです。
671 名前:デフォルトの名無しさん mailto:sage [03/07/02 19:54] >>669 いや、GHC(Win版)には既にWin32 API(の一部)のHaskell用インポートが付いてるんですよ。 >>670 どーせ丸写しなので、いくらでも共有しましょう。 import Win32 main = messageBox nullHANDLE "Text" "Title" mB_OK たった二行。 コンパイル時に -package win32オプションが必要です。 (win32ディレクトリ以下はデフォルトでは見てくれないので) ↓見つけたページ www.haskell.org/pipermail/glasgow-haskell-users/2002-March/003110.html なお、同じようにしてMessageBeepを呼ぼうとしましたが、挫折中です。
672 名前:デフォルトの名無しさん mailto:sage [03/07/02 20:21] >>669 あ、でもリンク先のFFIとか使えばできそう?できるのか俺に? …ありがとうございます
673 名前:デフォルトの名無しさん [03/07/05 01:11] FranTkを使った事のあるかたは居られますか? 使おうとしたけど何だかよくわからんかった。(窓使いです)
674 名前:デフォルトの名無しさん mailto:sage [03/07/06 22:26] >659 ttp://www.sampou.org/haskell/report-j/basic.html >6.1.2 文字と文字列 >文字型 Char は列挙型のひとつで、16 bit の値からなり、Unicode 標準 [10] に準拠する。 Unicodeなので要らないのでは? ちゃんと実装されているならばだが。
675 名前:デフォルトの名無しさん mailto:sage [03/07/07 10:39] > ちゃんと実装されているならばだが。 内部ではUnicodeかもしれないけど、全角文字をgetCharで読むと二回に分けて来るんですよ…
676 名前:デフォルトの名無しさん mailto:sage [03/07/07 17:07] >>674 Unicodeとその(バイトでの)エンコーディングは別物だ。
677 名前:デフォルトの名無しさん mailto:sage [03/07/08 02:44] >>676 実際 I/O functionsがbyte読んでそれをかえすだけだから、 Charが16ビットである意味がないんだよな。 謎の設計。
678 名前:デフォルトの名無しさん [03/07/14 01:55] return () << [1,2,3] が [1,2,3] を返すのは何で? ()モナドの定義?
679 名前:デフォルトの名無しさん [03/07/14 01:56] ごめん。わかってると思うけど << じゃなくて >> の間違い
680 名前: mailto:sage [03/07/14 03:29] >>678 リストはモナドだから。
681 名前:デフォルトの名無しさん mailto:sage [03/07/14 03:58] そういや、漏れもIOモナドはちょっと分かったつもりだけど、 なんでリストがモナドなのがいまいちよく分からん。
682 名前:デフォルトの名無しさん mailto:sage [03/07/14 04:22] m がモナドのとき return () << m が m になるのはなんで? ()モナドの定義?
683 名前:デフォルトの名無しさん mailto:sage [03/07/14 04:29] また >> を間違えて << にしてまった 書いた後気づいたのだが return [3,4] >> [1,2] も [1,2] 返すのか () がポイントではなく return の方がポイントだった かきまぜてスマン
684 名前:デフォルトの名無しさん mailto:sage [03/07/14 04:42] return 1 >> [1,2] でも return 'a' >> [1,2] でも同じだな
685 名前:デフォルトの名無しさん mailto:sage [03/07/14 14:12] >>682 >>の型からわかる型推論。
686 名前:デフォルトの名無しさん mailto:sage [03/07/14 14:13] もっというと()はどのモナドでも返せる。
687 名前:デフォルトの名無しさん [03/07/14 18:52] getChar って結局何返すの? 参照透明性からいって 'a' が入力されたからといって IO 'a' が返るわけじゃないんだよね たびたび出る話題でスマンが毎回納得にいたらない
688 名前:デフォルトの名無しさん mailto:sage [03/07/14 19:05] IO
689 名前:デフォルトの名無しさん mailto:sage [03/07/14 19:27] >>687 意味不明。IO Charだけど?
690 名前:デフォルトの名無しさん mailto:sage [03/07/14 20:13] >>687 強いて言えば IO 'a'だろうが、それで参照透明性に何の問題が?
691 名前:デフォルトの名無しさん [03/07/14 22:08] そもそもモナドを理解するのにIOモナドから入る,っていうのが間違っている という気がする.モナドを理解するためには,次の論文を読むのが吉かと. Wadler, P. : Monads for functional programming
692 名前:デフォルトの名無しさん mailto:sage [03/07/14 22:22] >>691 www.research.avayalabs.com/user/wadler/topics/monads.html ここにあるやつ?
693 名前:デフォルトの名無しさん [03/07/14 23:45] >> 692 そうそう.
694 名前:デフォルトの名無しさん [03/07/15 00:39] 関数型では同じ関数なら何回呼んでも同じ値が返る建前では 実は暗黙のworldが渡されていて暗黙の新しいworldも返されている?
695 名前:デフォルトの名無しさん mailto:sage [03/07/15 00:47] モナドって、食べ物じゃなかったのか。
696 名前:デフォルトの名無しさん [03/07/15 01:05] 理解するのに論文を読ませる必要がある事自体に 何か問題があるような気もするがー。
697 名前:デフォルトの名無しさん mailto:sage [03/07/15 01:28] 今印刷して読んでます…辞書片手に…どなたか、厨房向けに噛み砕いて説明してホスィ
698 名前:デフォルトの名無しさん [03/07/15 01:31] >>697 _,..............._,....... ,ノ⌒::::::::::::::::::::::::::::::::::::⌒ヽ_ _ノ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ヾ、 (::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::) _ノ:::::::::::::::;ヘ::::::::::ノ⌒ヽ:::::::::::::::::::::::::::::::::) (::::::::::::::::::/  ̄ , ‐-、 |::::::::::::::::::::::::::::::::) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (:::::::::::::/ヽj _/ -‐-、 |::::::::::::::::::::::::::::::::) | トリックだ。 ):::::::::ヾllli_、_,;iiiillllllllli <::::::;へ:::::::::::::::::( | (::::::::::::/`i´ ,└=゚'┘ |::::| 6 |:::::::::::::::::::} < 副作用があるように見えているに `〜、 ゝ| _コ、_、 /|::::| ソ/::::::::::;〜" | 過ぎん。 ヾ|||ll|||||||||||l〉| 三ー'〜〜" | |||:二三|||| l ,三 ヽ、 \______________ |l ⌒ ||| :// ヽ=、-、_ |l、:( : : ||/ / ヽ, |  ̄\ /  ̄ / ノ / \
699 名前:デフォルトの名無しさん mailto:sage [03/07/15 06:43] >>682 return () >> [1,2,3] 後ろがリストなので、これはリストモナド returnを外して、>> を >>= に変換すると、 [()] >>= (\x -> [1,2,3]) 前のリストの要素それぞれに対して後ろの関数を呼んで、その結果を連結したものがこの式の値なので、 (\x -> [1,2,3]) () [1,2,3]
700 名前:デフォルトの名無しさん mailto:sage [03/07/15 08:15] >>694 その通り。IO a はHaskellの側から見ると、 data IO a = IO (World -> (a, World)) このような構造になっていて、実行結果がIOだった場合に、表示する前にWorldが渡されて実行される。 実際はそんな面倒なことしていないと思うけどね。
701 名前:デフォルトの名無しさん mailto:sage [03/07/15 08:48] 半分ぐらい読みました…まさに>>698 のおっしゃる通り…それ以後の式を全部λとして渡して、 でっかい合成関数を組み立てて、最後に一括して実行してるようなイメージでいいのでしょうか?→モナド (と同時に、実装までそうなってないよなあと信じたい)
702 名前:デフォルトの名無しさん mailto:sage [03/07/15 09:03] >>698 モナドを使えば副作用は「ある」というべきだろう。 たとえばモナドを利用したカウンタを利用して、 あるいは、ファイルに1, 2, ...と書き込んでループをつくれば、 あきらかにそこには副作用があるわけだ。 むしろWorldを変化させながら渡し続けるという発想の転換で(言語に対し) 無いように見せかけているだけだ。人間にとっては副作用は存在する。
703 名前:デフォルトの名無しさん mailto:sage [03/07/15 09:26] >>702 あるように見せかけているだけだろ? そうじゃなきゃモナドの意味がない
704 名前:山崎 渉 mailto:(^^) [03/07/15 09:34] __∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄
705 名前:デフォルトの名無しさん mailto:sage [03/07/15 11:33] >>701 よいはず。 あと、遅延実行されるのでそう実装しても効率は悪くならないと思う。
706 名前:デフォルトの名無しさん mailto:sage [03/07/15 18:29] >>703 逆だよ。というか循環論法。 そもそも関数型言語には本来副作用は存在し得ない。状態ってものが無いからね。 しかし、特に外部とアクセスするプログラムのためには副作用が必要だ。 関数型言語と、その副作用をともなう処理を、 副作用の種類(IOとか)毎の(内部状態を保持する)モナドを導入することで*分離*してるだけだ。
707 名前:デフォルトの名無しさん mailto:sage [03/07/15 18:34] >>705 701のイメージはあってるが、 > あと、遅延実行されるのでそう実装しても効率は悪くならないと思う。 遅延実行だからこそそういう式の組み立てと式の保存をやらないといけないわけで、 むしろ遅延評価だからと言ってそういう実装をするととんでもないことになる というべき。 通常の式の評価でも下手に(末尾)再帰すると未評価の式の列が莫大になって すぐオーバーフローする。
708 名前:701 [03/07/15 21:26] 大雑把に読みました。後半のパーサは読み飛ばしましたが… データ型としてのモナドは、要するにC++のクラスtemplate、のようなもの…ですよね? ということは、IO a -> aな関数が記述不可能なのは、言語の外を相手にしたIOモナドに限った制限で 一般的にはそんな制限は無い、で合ってます? 簡単なサンプルコードどこかにないかな…
709 名前:デフォルトの名無しさん mailto:sage [03/07/15 21:44] >>708 リストから成分を抽出できるでしょ。
710 名前:デフォルトの名無しさん mailto:sage [03/07/16 00:34] >>709 ありがとです。 で、>>681 氏と同じ疑問に行き当たるわけですが… リストが状態を持っているとは思えないのですが、なぜモナド? (a, b)とか他の一般の構造化型はモナドじゃ無いですよね。
711 名前:デフォルトの名無しさん mailto:sage [03/07/16 01:00] >>710 リストを丸ごと全部で値と思わずに一部だけ更新したいんじゃない? 一部だけ更新するような操作には普通副作用がある。 …違うかな?
712 名前:デフォルトの名無しさん mailto:sage [03/07/16 01:52] リストは >>= と return がモナド演算の法則を 満たしているからモナドなんじゃないかな (a,b)とか一般の構造型はコンテナの中身の個数が1個ではない定数なのでうまく モナド演算を定義できないような気がする リストモナドの中身は任意個数。IOモナドは1個固定。
713 名前:デフォルトの名無しさん mailto:sage [03/07/16 02:29] 眠れない… えーと、要するに、必然性は無いけど、 モナドということにすると [a] >>= (\e -> return (f e)) みたいな便利機能として使えるので モナドということにしてある、ということですか。 >>711 よく見て無いのですが、ライブラリリファレンスにMutable ArraysとしてIOArrayが書かれてますので、 もしリストモナドで一部の更新が可能なら、こんなもの用意しないと思うので、それは違う気が (我ながら無茶苦茶な論法だ…)
714 名前:デフォルトの名無しさん mailto:sage [03/07/16 02:51] あれもこれも、Haskellの和書が出ないのが悪い。
715 名前:デフォルトの名無しさん mailto:sage=705 [03/07/16 10:48] >>707 すまんが、そういうふうにする以外の方法が自分には想像できない。 doも普通の再帰なので問題はなさそうだが? >>711 リストモナド≒内包表記 副作用を発生できるモナドはIOモナドだけです。 >>710 ListとMaybeだけだね。 試しに、(a, b) でMonadを作ってみたが…きつい。 --- instance Monad ((,) a) where (>>=) (sub, main) f = (sub, main') where (sub', main') = f main return main = (bottom, main) bottom = bottom test = do x <- (("a", 2), 1) y <- return $ x+1 return $ y*2 --- *Main> test (("a",2),4)
716 名前:デフォルトの名無しさん [03/07/16 12:02] だれとはなくに 「型構築子」IO はモナドだけど IO a はモナドじゃないよ。 「型構築子」[] はモナドだけど [a] はモナドじゃないよ。
717 名前:デフォルトの名無しさん mailto:sage 702,706,707,709 [03/07/16 12:17] >>713 haskellのリストやアレイはは一部を変更すると全部コピー。 というのは、そのデータ(リスト等)が他の場所で使われるかもしれないから。 一部を変更したということがそのデータを使うプログラムの他の部分にも わからないといけない。 そのためには、使う部分全部をそのデータの内部状態をあらわすモナドでくるんで おく必要がある。 # 変更し終わったら、それはモナドの外に出してもいい。 >>715 701の件については、誤読していた。それ以降の式、ってのが何を指すのかわからない。 それはともかくとして、 (IO/状態)モナド内の計算の実行は、手続き型と同様にできるとおもうけど。 > 副作用を発生できるモナドはIOモナドだけです。 haskellプログラムがわからみればIOも他のモナドもかわらない。 プログラマから見たときも結局は同じこと。謎の内部状態をもつ モナドを受渡しながら処理を順次実行するわけだから。 内部で定義されたモナドでもそのモナドの性質をみとおさなければ、 副作用と同様でしょう。
718 名前:デフォルトの名無しさん mailto:sage 717 [03/07/16 12:30] 別のいいかたをすれば、711が書いているように、普通一部を変更すると 副作用が出るわけで、関数型言語では一般にはそれができない。 だが、その副作用/状態を追跡するモナド(STArray,IOArray等)を引数と して渡し続けながらの順次計算であれば一部変更もできるわけだ。
719 名前:デフォルトの名無しさん [03/07/16 12:45] だれとはなくに 「データ構築子」はファーストクラスだけど 「型構築子」はファーストクラスじゃないよ。
720 名前:デフォルトの名無しさん [03/07/16 13:13] だれとはなくに モナドは「型構築子」の性質であって、データの性質じゃないよ。
721 名前:デフォルトの名無しさん mailto:sage=699,700,705,715 [03/07/16 15:29] >>717 まず、すまんかった。 確かに中身を見なければ副作用を起こすことは可能だ。そちらの言う通り。 以降の式だが、自分は a >>= (\x -> b) の式に出てくるλのことだと思っている。 そして、715のそういうふうにとは、どでかい合成関数を作ってからそれを実行するということ。 もちろん、遅延実行されるので、少し作ってはそれを実行してというふうになると思っているが。 >(IO/状態)モナド内の計算の実行は、手続き型と同様にできるとおもうけど。 main = sequence_ $ reverse $ [putStr "\n", putStr "a", putStr "b"] こう言うのはどうする…? …特殊すぎるか。他は最適化されててもおかしくないやね。 >>718 少なくともIOArrayはIOモナドの一部であってモナドそのものではないと思うが。 >>719 しかし少なくともカリー化はされている。
722 名前:デフォルトの名無しさん mailto:sage [03/07/16 16:39] >>715 サンプルとして活用させていただきます で、勝手にインデント。 module Main where instance Monad ((,) a) where (>>=) (sub, main) f = (sub, main') where (sub', main') = f main return main = (bottom, main) bottom = bottom test = do x <- (("a", 2), 1) y <- return $ x+1 return $ y*2 >>721 表現が悪くて申し訳ないです。そのつもりでした。do A; B… と書いた時のB以降です。
723 名前:デフォルトの名無しさん [03/07/16 17:37] data Id a = Id a deriving Show instance Monad Id where Id x >>= f = f x return = Id foo :: Int -> Id Int foo arg = do { x <- ID arg ; x <- ID (x * 2) ; x <- ID (x + 1) ; return x } というHaskell のプログラムと、 int foo (int arg) { int x; x = arg; x = x * 2; x = x + 1; return x; } は、そっくり。上は副作用をつかってないですけど、 下は副作用をつかっています。 そんだけ。 int
724 名前:デフォルトの名無しさん [03/07/16 18:28] >>723 ID じゃなくて Id