5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-03-12

ズンドコキヨシとは?

流行ってるらしい
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だと文字化けしました

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?