Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

ズンドコキヨシとは?

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

YukiMiyatake
C++が喋れる ゲームプログラマ インフラ、サーバ、UNITY、ゲームエンジンが最近多いな・・ MONA: MPpuEnmqDYBCxSZyG5cBDt6UWtXczmRmkn BTC: 13JpgsF3n6K2WhjEeUuUUqS7V71gWdFx56 BCH: 18q6rfi9ynyTgynrB8tJ2eSDLPQM32RZk5
http://murasame-labo.hatenablog.com/
murasame
ゲーム、エンタメ、サーバインフラ等 少人数で技術力の高い仕事をする会社
http://murasame-lab.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした