ズンドコキヨシ with はじめてのHaskell

  • 5
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

ズンドコキヨシとは?

流行ってるらしい
http://qiita.com/shunsugai@github/items/971a15461de29563bf90

ランダムで ズン と ドコ を出力し
ズン4回以上のあとドコが来たら キ・ヨ・シ! を出力して終了
という勉強にはもってこいの教材

Haskellを勉強しながら書いてみる

Haskell なくね?
ってことで、HaskellをWebで勉強しながら 書いてみる

モナドってなにーーーー アクションってなにーーーー 

zundoko
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だと文字化けしました