Scalaらしく再帰とパターンマッチで。
kiyoshi.scala
import scala.util.Random
def zundoko(zd: List[String] = Nil): Unit = zd match {
case "ドコ" :: "ズン" :: "ズン" :: "ズン" :: "ズン" :: _ => println(zd.reverse.mkString + "キ・ヨ・シ!")
case _ => zundoko((if(Random.nextBoolean) "ズン" else "ドコ") :: zd)
}
zundoko()
再帰とパターンマッチ……先を越されてしまいましたorz
あ、あとYコンビネータで
kiYoshi.scala
import scala.util.Random
def Y[A, B](f: ((A => B), A) => B, x: A): B = f((y: A) => Y(f, y), x)
Y((zundoko: List[String] => Unit, zd: List[String]) => zd match {
case "ドコ" :: "ズン" :: "ズン" :: "ズン" :: "ズン" :: _ => println(zd.reverse.mkString + "キ・ヨ・シ!")
case _ => zundoko((if(Random.nextBoolean) "ズン" else "ドコ") :: zd)
}, Nil)