コラッツ予想がとけたらいいな2

自分の考察を書いていきます。

PureScriptと戯れよう その4(ズンドコ2)

「ズンドコキヨシ」とは、
「ズン」「ドコ」のいずれかをランダムで出力し続け、
「ズン」「ズン」「ズン」「ズン」「ドコ」の列が出たら
「キ・ヨ・シ!」と出力して終了するプログラムだ。




前回

ライブラリのインストール

$ spago install random

ソースコード

モナド変換子を使わずに、相互再帰で書けた。

module Main where

import Prelude

import Effect (Effect)
import Effect.Console (log)
import Effect.Random (randomInt)


main :: Effect Unit
main = zunEffect 0
  where
    zunEffect :: Int -> Effect Unit
    zunEffect cnt = do
      r <- randomInt 0 1
      sub r cnt
        where
          sub :: Int -> Int -> Effect Unit
          sub r c
            | r == 0           = do log "ズン"
                                    zunEffect (c + 1)
            | r == 1 && c >= 4 = do log "ドコ"
                                    log "キ・ヨ・シ!"
                                    pure unit --終了
            | otherwise        = do log "ドコ"
                                    zunEffect 0