関数型プログラミング言語Haskell Part10at TECH関数型プログラミング言語Haskell Part10 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト361:デフォルトの名無しさん 09/03/25 22:00:07 >>360 > test ((->) a b) = a ++ b これが可能な型コンストラクタの例をあげてみて 362:デフォルトの名無しさん 09/03/25 22:52:33 runWriter >>> (printf "\nresult : %d\n" *** debugPrint) >>> uncurry (>>) $ foo 10 0 (IO a, IO a)をIO aにしようと思えばこういう風に結合するしかないんでしょうか? m(m a)や[m a]をならすjoinやsequenceみたいなものがあると思うんですが 363:デフォルトの名無しさん 09/03/25 23:00:55 結合ってのは uncurry (>>)の部分でArrowの濫用をしているというところではないです。 しかし自重してかつリスプみたいにならないで済む方法があれば教えてほしいです。 haskell初心者にありがちなポイントフリー厨になっているというところは多少自覚しておりますorg。 364:デフォルトの名無しさん 09/03/25 23:44:22 >>359 読んでみたけど、入門以前な私にはちょっと難しかったです。 fstは組み込みの演算子でタプルの先頭を取り出すと理解しましたが、 一つ目の例だと先行評価の例でもコンパイル時に(\x -> fst (sum x, product x))を(sum x) と最適化してから実行したらどうなのかな?と思いました。要するにCでいうこんなのかなと。 int t1, t2; t1 = sum(x); t2 = product(x); //副作用がないなら、これコンパイル時に消えるんじゃない?簡約というのは実行とはちがうのかな。 return t1; 二つ目の例だと、(やはりCとかを仮定すると)sumとproductの引数xは同一の変数というイメージがあります。 整数のリストへのポインタみたいな感じをもっていると、遅延評価の例で 「sumが0+1+2+3+4になったときのxをproductで使える」とどう嬉しいのかイマイチです… よくわからないので、本読んでみることにしました。最初はテンプレにあるIntroduction to Functional Programming Using Haskellというのでいい? 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch