// fizzbuzz def fizzCont(i: Int): Cont[String, Int] = Cont { ar => if (i % 3 == 0) { "Fizz" // 継続(ar)を実行しないので計算が "Fizz" で終了する } else { ar(i) // 継続に i を渡し、残りの処理を実行する } } // === def fizzCont(i: Int): Cont[String, Int] = Cont(ar => if (i % 3 == 0) "Fizz" else ar(i)) def buzzCont(i: Int): Cont[String, Int] = Cont(ar => if (i % 5 == 0) "Buzz" else ar(i)) def fizzBuzzCont(i: Int): Cont[String, Int] = Cont(ar => if (i % 15 == 0) "FizzBuzz" else ar(i)) def fizzBuzz(i: Int): Cont[String, Int] = for { a <- fizzBuzzCont(i) b <- fizzCont(a) c <- buzzCont(b) } yield c // === scala> LazyList.from(1).map(fizzBuzz(_).run(_.toString)).take(15).toList res54: List[String] = List(1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz) // ===