ズンドコキヨシとは?
流行ってるらしい
http://qiita.com/shunsugai@github/items/971a15461de29563bf90
ランダムで ズン と ドコ を出力し
ズン4回以上のあとドコが来たら キ・ヨ・シ! を出力して終了
という勉強にはもってこいの教材
Haskellを勉強しながら書いてみる
Haskell なくね?
ってことで、HaskellをWebで勉強しながら 書いてみる
モナドってなにーーーー アクションってなにーーーー
import System.IO
import System.Random
zun:: Int -> [Int] -> String
zun cnt (0:ran) = "ズン" ++ zun (cnt+1) ran
zun cnt (r:ran)
| cnt > 3 = "ドコキ・ヨ・シ!"
| otherwise = "ドコ" ++ zun 0 ran
main :: IO()
main = do
gen <- getStdGen
let ran = randomRs(0,1) gen::[Int]
putStrLn $ zun 0 ran
Haskellを勉強しつつ書いているので、改善とか 他のやり方とか教えて下さい!!
ポイント
初心者らしく背伸びせず、わかりやすい&関数型を意識したコードを書いたつもりです
関数型を意識し、無限リストと再帰関数で実現
ラムダ等使ってもよかったかもしれないけど 読みやすさ優先です
是非 色々なHaskellコードを見せてくれるとありがたい・・
初心者がつまったところ
ほんと初心者で 文法に苦労した・・
まず パターンマッチとガードのあたりが、細かく理解できず混同させてた
パターンマッチっていうより、同じ名前の特殊化された関数を作っているんですね・・
関数呼び出しは ()や, を使わないのだけど、ついくせで 書いてしまったり
最大に困ったのは
putStrLn $ zun 0 ran
この部分を
putStrLn zun 0 ran
って書いてエラーが出て エラーをみると putStrLnに3つの引数を送っていて、かといって
putStrLn (zun 0 ran)
と書くと怒られる
こういうときに $ を使うみたいですね
あとは printだと文字化けしました