[過去ログ] 関数型プログラミング言語Haskell Part16 (978レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
186(10): デフォルトの名無しさん [sage] 2011/10/20(木) 22:49:20.89 AAS
FizzBuzzを剰余使って書くのはすぐ思いつくけど、以下のは新鮮だった。
どうやったらこんな発想が出来る様になるんだろ。
fizz = cycle ["","","Fizz"]
buzz = cycle ["","","","","Buzz"]
f s n
| s == "" = show n
| otherwise = s
main = print $ zipWith f (zipWith (++) fizz buzz) [1..100]
187(2): デフォルトの名無しさん [sage] 2011/10/20(木) 23:11:26.56 AAS
>>186
オレ、そのアルゴリズム自力で思いついたけど、そんなに不思議かな。
たしか、3を法とする商群と5を法とする商群をなんとかすれば・・・ みたいなことを考えていて、思いついた
188(1): 186 [sage] 2011/10/20(木) 23:29:22.83 AAS
>>187
C、java、rubyと来たのでmapは理解していたけど、手続き型言語には無い発想だと思う。
ついでに言うと、今なら手続き型言語ユーザーが何故、関数型言語を誤解するのか判る気がする。
「関数」「型」「評価」など、同じ字面でも関数型言語とは違う意味で説明される物が多い。
190(1): デフォルトの名無しさん [sage] 2011/10/20(木) 23:53:46.97 AAS
>>186
いいかどうかは別にして、カウンタやインデキシングを避けて、
何でもリストで考えればそうなる。
そうするとリストの代数的操作でプログラミングするようになる。
Richard Bird先生の本を読むのがいいかもしれない。
196(1): 186 [sage] 2011/10/21(金) 08:04:56.77 AAS
>>190
>>>186
>Richard Bird先生の本を読むのがいいかもしれない。
情報有難う!
Research paperを幾つか、ざっと読んでみた。
まだよく理解出来ない所も多いけど、Haskellって面白い。
200: デフォルトの名無しさん [sage] 2011/10/21(金) 11:19:02.96 AAS
>>192192(1): デフォルトの名無しさん [sage] 2011/10/21(金) 00:05:06.91 AAS
よーしパパFizzモナドとBuzzモナドを合成しちゃうぞー
のアイデアを水平合成とみて>>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]みたいな型になればそれっぽいんだけど
227: デフォルトの名無しさん [sage] 2011/10/22(土) 21:33:29.29 AAS
>>186
楽しいね、これ。ずっとスレ覗くだけだったけど、久しぶりにhaskellしたくなってきたよ。
241(1): デフォルトの名無しさん [sage] 2011/10/22(土) 23:47:33.53 AAS
>>186が楽しいって感覚は分からないな
Haskellや関数型プログラミングらしくなくて、むしろ気持ち悪いくらいなんだけど
242: デフォルトの名無しさん [sage] 2011/10/22(土) 23:54:35.79 AAS
>>186
俺は、楽しいかどうかというより、
そういう発想が他のどういうところに活かされるのか気になる
248(1): デフォルトの名無しさん [sage] 2011/10/23(日) 00:32:44.35 AAS
どっちでもいいけど
>>186のどこが関数的?
250: デフォルトの名無しさん [sage] 2011/10/23(日) 01:26:52.91 AAS
>>248 じゃないけど、おれも >>186 のどこが関数的か分からん
関数的とも手続き的手も言えん、なんとも分からん代物
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.033s