[過去ログ]
関数型プログラミング言語Haskell Part16 (978レス)
関数型プログラミング言語Haskell Part16 http://echo.5ch.net/test/read.cgi/tech/1317958045/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
780: デフォルトの名無しさん [sage] 2011/12/22(木) 05:28:49.45 >>778 whereIncluded [1..6] [5] 4 = whereIncluded [2..6] [] 4 = After http://echo.5ch.net/test/read.cgi/tech/1317958045/780
781: デフォルトの名無しさん [sage] 2011/12/22(木) 07:22:14.40 >>780 あぁなるほど、そうか ちょっと修正案を考えてみる http://echo.5ch.net/test/read.cgi/tech/1317958045/781
782: 778 [sage] 2011/12/22(木) 07:52:15.94 >>780 に指摘されて修正案を考えてる時に、 全然違うアイデアが思い浮かんだんだが、 これは今まで出てきたかな(特に >>771 と同類か) listA から x の位置を探す x の位置の直後から http://echo.5ch.net/test/read.cgi/tech/1317958045/782
783: 778 [sage] 2011/12/22(木) 07:55:25.77 途中でレスってしまった >>780 に指摘されて修正案を考えてる時に、 全然違うアイデアが思い浮かんだんだが、 これは今まで出てきたかな(特に >>771 と同類か) listA から x の位置を探す x の位置の直後から listB の要素数分の要素をリストとして取り出す listC x が listB に無い場合、head listB が listC に有れば「前」 head listB が listC に無ければ「後ろ」 http://echo.5ch.net/test/read.cgi/tech/1317958045/783
784: 778 [sage] 2011/12/22(木) 08:55:12.79 >>783 訂正 > x の位置の直後から listB の要素数分の要素をリストとして取り出す listC x の位置の直後から末端までをリストとして取り出す listC http://echo.5ch.net/test/read.cgi/tech/1317958045/784
785: 778 [sage] 2011/12/22(木) 12:54:37.61 >>783,784 式にするとこんな感じ whereIncluded :: (Eq a) => [a] -> [a] -> a -> Where whereIncluded as bs@(b:_) x | elem x bs = Here | elem b as' = After | otherwise = Before where as' = takeWhile (/=x) as ダサいかな http://echo.5ch.net/test/read.cgi/tech/1317958045/785
786: デフォルトの名無しさん [sage] 2011/12/22(木) 20:08:59.62 Haskell Platform じゃなくて素の GHC の方には、 random パッケージってデフォルトでは入ってないんだね 地味に驚いた http://echo.5ch.net/test/read.cgi/tech/1317958045/786
787: デフォルトの名無しさん [sage] 2011/12/22(木) 21:36:01.61 QuickCheck を調べてて、ステキなリファクタリング テクニックに出会った http://www.haskell.org/haskellwiki/Introduction_to_QuickCheck リファクタリング前は(インデントに全角スペースを入れた)、 getList = find 5 where find 0 = return [] find n = do ch <- getChar if ch `elem` ['a'..'e'] then do tl <- find (n-1) return (ch : tl) else find n というコードなんだが、副作用がある処理と無い式とが混ざっててテストし難い (また、全体の処理もぱっと見分かりにくい) これがリファクタリングで次のようになる getList :: IO [Char] getList = fmap take5 getContents take5 :: [Char] -> [Char] take5 = take 5 . filter (`elem` ['a'..'e']) ちょっと感動した こういうことがサラっとできるようになりたいもんだ http://echo.5ch.net/test/read.cgi/tech/1317958045/787
788: デフォルトの名無しさん [sage] 2011/12/22(木) 21:56:17.35 遅延I/O怖い>< http://echo.5ch.net/test/read.cgi/tech/1317958045/788
789: デフォルトの名無しさん [] 2011/12/22(木) 22:55:08.11 モナドって大した概念なの? http://echo.5ch.net/test/read.cgi/tech/1317958045/789
790: デフォルトの名無しさん [sage] 2011/12/22(木) 22:59:36.72 ものごとを抽象化するための仕組みとしては大したもんだよ http://echo.5ch.net/test/read.cgi/tech/1317958045/790
791: デフォルトの名無しさん [] 2011/12/23(金) 10:28:44.71 >>790 なんかいい例希望 モナドはものごと全部を抽象化するんじゃないよね? http://echo.5ch.net/test/read.cgi/tech/1317958045/791
792: デフォルトの名無しさん [sage] 2011/12/23(金) 10:30:00.16 STMとか? http://echo.5ch.net/test/read.cgi/tech/1317958045/792
793: デフォルトの名無しさん [] 2011/12/23(金) 12:02:29.11 >>790 >>791 そうだな。なんでも抽象化できるんならこれまた意味不明になるし。 だいたい、何なんだよ抽象化って。 http://echo.5ch.net/test/read.cgi/tech/1317958045/793
794: デフォルトの名無しさん [sage] 2011/12/23(金) 17:44:45.43 モナドによる抽象化ってのは、だいたい(Monad m) =>で始まる型のある関数を書くこと 具体例はControl.Monadとか見れば http://echo.5ch.net/test/read.cgi/tech/1317958045/794
795: デフォルトの名無しさん [sage] 2011/12/23(金) 17:52:14.34 それで、何をどう抽象できて、何は抽象できないの? モナドで抽象する前と後とで何が変わるの? http://echo.5ch.net/test/read.cgi/tech/1317958045/795
796: デフォルトの名無しさん [sage] 2011/12/23(金) 18:06:55.65 いつもの糖質が現われる頃合いだな http://echo.5ch.net/test/read.cgi/tech/1317958045/796
797: デフォルトの名無しさん [sage] 2011/12/23(金) 18:16:45.13 >>795 Control.Monadにあるようなものは抽象化できるし、 (Monad m) =>で書けなさそうなものは抽象化できない 言葉で言われて分かる類の問題じゃないから具体例を見たり書いたりして慣れるしかないよ >モナドで抽象する前と後とで何が変わるの? 関数の型が変わって任意のモナドに対して使えるようになる。たとえば、 foreach :: [a] -> (a -> IO ()) -> IO () -- foreach xs f はxsの各要素に対してfを実行 をモナドに関して抽象化すれば、 forM_ :: (Monad m) => [a] -> (a -> m b) -> m () になって、IO以外でも使えるようになる http://echo.5ch.net/test/read.cgi/tech/1317958045/797
798: デフォルトの名無しさん [sage] 2011/12/23(金) 18:19:11.21 抽象化できないものの証明って難しいな。もうあるのだろうか。 http://echo.5ch.net/test/read.cgi/tech/1317958045/798
799: デフォルトの名無しさん [sage] 2011/12/23(金) 18:22:51.88 いい例かどうか分からないが http://blog.sigfpe.com/2006/08/you-could-have-invented-monads-and.html http://www.haskell.org/haskellwiki/Monads_as_containers http://www.haskell.org/haskellwiki/Monads_as_computation http://echo.5ch.net/test/read.cgi/tech/1317958045/799
800: デフォルトの名無しさん [sage] 2011/12/23(金) 18:24:52.49 コードが書いてあるあたりだけでもざっと見ればいいよ http://echo.5ch.net/test/read.cgi/tech/1317958045/800
801: デフォルトの名無しさん [] 2011/12/23(金) 18:26:57.57 >>797 サンクス http://echo.5ch.net/test/read.cgi/tech/1317958045/801
802: デフォルトの名無しさん [sage] 2011/12/23(金) 18:32:22.82 >>797 それってオブジェクト指向でメソッドの引数の型を IO型からObject型にするのと、どう違うの? http://echo.5ch.net/test/read.cgi/tech/1317958045/802
803: デフォルトの名無しさん [sage] 2011/12/23(金) 18:47:13.75 メソッドの引数に限定する意味が良くわからないが bindとかreturnというメソッドを持ったIO型を一般化して、 Monadという抽象クラスから派生するようにしたら便利なのと一緒。 http://echo.5ch.net/test/read.cgi/tech/1317958045/803
804: デフォルトの名無しさん [sage] 2011/12/23(金) 18:53:48.59 >>802 色んなものの「共通する性質」や「共通する関係」を抜き出し、 具体的な実態では無くその性質や関係のみで以て語るのが「抽象化」だから、 抽象化するという意味は同じ どう抽象化するかという点で、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型がどういう性質の抽象化なのかは忘れた http://echo.5ch.net/test/read.cgi/tech/1317958045/804
805: デフォルトの名無しさん [sage] 2011/12/23(金) 18:59:26.87 なんかHaskellPlatform DLできないんだけど鯖どうなってんこれ http://echo.5ch.net/test/read.cgi/tech/1317958045/805
806: デフォルトの名無しさん [] 2011/12/23(金) 19:27:53.45 >>799 ありがとう。読んでみる。 http://echo.5ch.net/test/read.cgi/tech/1317958045/806
807: デフォルトの名無しさん [sage] 2011/12/23(金) 19:37:49.40 >>802 その例だと、内部でやってることもだいたい同じ 実際の型に応じて実装が選ばれる 実装を選ぶタイミングがコンパイル時か実行時かは違う 型クラスは ad-hoc polymorphism を使いやすくしたものでオーバーロードの親戚 OOPのほうはsubtype polymorphismといって、部分かなり違う部分がある 例えばsubtype relationが推移律をみたすみたいな強い性質がある subtypeがあるとどうなるかは、Scalaが壮大な社会実験中 http://echo.5ch.net/test/read.cgi/tech/1317958045/807
808: デフォルトの名無しさん [sage] 2011/12/23(金) 20:08:50.39 Objectにしたらキャストがいるよね interface Monadみたいの定義しないと http://echo.5ch.net/test/read.cgi/tech/1317958045/808
809: デフォルトの名無しさん [sage] 2011/12/23(金) 21:29:18.89 抽象化と言うか普遍化だな。 http://echo.5ch.net/test/read.cgi/tech/1317958045/809
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 169 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.009s