[過去ログ]
関数型プログラミング言語Haskell Part16 (978レス)
関数型プログラミング言語Haskell Part16 http://echo.5ch.net/test/read.cgi/tech/1317958045/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
186: デフォルトの名無しさん [sage] 2011/10/20(木) 22:49:20.89 FizzBuzzを剰余使って書くのはすぐ思いつくけど、以下のは新鮮だった。 どうやったらこんな発想が出来る様になるんだろ。 fizz = cycle ["","","Fizz"] buzz = cycle ["","","","","Buzz"] f s n | s == "" = show n | otherwise = s main = print $ zipWith f (zipWith (++) fizz buzz) [1..100] http://echo.5ch.net/test/read.cgi/tech/1317958045/186
187: デフォルトの名無しさん [sage] 2011/10/20(木) 23:11:26.56 >>186 オレ、そのアルゴリズム自力で思いついたけど、そんなに不思議かな。 たしか、3を法とする商群と5を法とする商群をなんとかすれば・・・ みたいなことを考えていて、思いついた http://echo.5ch.net/test/read.cgi/tech/1317958045/187
188: 186 [sage] 2011/10/20(木) 23:29:22.83 >>187 C、java、rubyと来たのでmapは理解していたけど、手続き型言語には無い発想だと思う。 ついでに言うと、今なら手続き型言語ユーザーが何故、関数型言語を誤解するのか判る気がする。 「関数」「型」「評価」など、同じ字面でも関数型言語とは違う意味で説明される物が多い。 http://echo.5ch.net/test/read.cgi/tech/1317958045/188
190: デフォルトの名無しさん [sage] 2011/10/20(木) 23:53:46.97 >>186 いいかどうかは別にして、カウンタやインデキシングを避けて、 何でもリストで考えればそうなる。 そうするとリストの代数的操作でプログラミングするようになる。 Richard Bird先生の本を読むのがいいかもしれない。 http://echo.5ch.net/test/read.cgi/tech/1317958045/190
196: 186 [sage] 2011/10/21(金) 08:04:56.77 >>190 >>>186 >Richard Bird先生の本を読むのがいいかもしれない。 情報有難う! Research paperを幾つか、ざっと読んでみた。 まだよく理解出来ない所も多いけど、Haskellって面白い。 http://echo.5ch.net/test/read.cgi/tech/1317958045/196
200: デフォルトの名無しさん [sage] 2011/10/21(金) 11:19:02.96 >>192のアイデアを水平合成とみて>>186のに適用するとこんな感じ? type Magma a = a -> a -> a class MonadZero m where mzero :: m a class MonadZero m => MonadOr m where mor :: Magma (m a) class MonadZero m => MonadPlus m where mplus :: Magma (m a) instance MonadZero [] where mzero = [] instance MonadOr [] where mor xs = if null xs then id else const xs instance MonadPlus [] where mplus = (++) fizz = cycle $ replicate 2 mzero `mplus` return "Fizz" buzz = cycle $ replicate 4 mzero `mplus` return "Buzz" fizzbuzz = zipWith mplus fizz buzz main = print $ zipWith mor fizzbuzz $ map show [1..100] listモナドの和を論理和(つまりMaybeモナドの和)、数値和の二通りに見ることで数値和で作ったfizzbuzzのパターンと数字のパターンを論理和で合成する・・・と Listを信号としてみれば、もろor回路による信号の合成だよな。始まる場所が変わることに対してはdrop等で開始位置をずらしてつまり信号のdelay回路か SignalArrowを使った抽象化でもいけそうに見えるな それはさておき垂直合成、つまりモナド変換子を使うのはどうなるんだろうか FizzT (FuzzT Identity Int) [String]みたいな型になればそれっぽいんだけど http://echo.5ch.net/test/read.cgi/tech/1317958045/200
227: デフォルトの名無しさん [sage] 2011/10/22(土) 21:33:29.29 >>186 楽しいね、これ。ずっとスレ覗くだけだったけど、久しぶりにhaskellしたくなってきたよ。 http://echo.5ch.net/test/read.cgi/tech/1317958045/227
241: デフォルトの名無しさん [sage] 2011/10/22(土) 23:47:33.53 >>186が楽しいって感覚は分からないな Haskellや関数型プログラミングらしくなくて、むしろ気持ち悪いくらいなんだけど http://echo.5ch.net/test/read.cgi/tech/1317958045/241
242: デフォルトの名無しさん [sage] 2011/10/22(土) 23:54:35.79 >>186 俺は、楽しいかどうかというより、 そういう発想が他のどういうところに活かされるのか気になる http://echo.5ch.net/test/read.cgi/tech/1317958045/242
248: デフォルトの名無しさん [sage] 2011/10/23(日) 00:32:44.35 どっちでもいいけど >>186のどこが関数的? http://echo.5ch.net/test/read.cgi/tech/1317958045/248
250: デフォルトの名無しさん [sage] 2011/10/23(日) 01:26:52.91 >>248 じゃないけど、おれも >>186 のどこが関数的か分からん 関数的とも手続き的手も言えん、なんとも分からん代物 http://echo.5ch.net/test/read.cgi/tech/1317958045/250
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.043s