case class Gen[A](sample:State[RNG,A])
Exercise8.4 Genの上記の表現を使って、startからstopExclusiveの範囲内の整数を生成するchooseを実装せよ
def choose(start: Int, stopExclusive: Int): Gen[Int] =
Gen(State(RNG.nonNegativeInt).map(n => start + n % (stopExclusive-start)))
Stateの中身を忘れていて、もう一度、前のところを読み直さないとよくわからなくなっている。
Exercise6.10のmapを確認すると def map[B](f: A => B): State[S, B] ということだから
StateのnonNegativeInt:Aが範囲内の整数:Bに変換されState[S,B]になっている。
Exercise8.5
def unit[A](a: => A): Gen[A] =
Gen(State.unit(a))
def boolean: Gen[Boolean] =
Gen(State(RNG.boolean))
booleanという関数が見当たらないような気がするが。。
def listOfN[A](n: Int, g: Gen[A]): Gen[List[A]] =
Gen(State.sequence(List.fill(n)(g.sample)))
>booleanという関数が見当たらないような気がするが。。
返信削除遅レスですが、回答ページの
「fpinscala/exercises/src/main/scala/fpinscala/state/」のState.scalaではなく、「fpinscala/answers/src/main/scala/fpinscala/state/State.scala」に
> def boolean(rng: RNG): (Boolean, RNG) =
> rng.nextInt match { case (i,rng2) => (i%2==0,rng2) }
とあります。
問題演習では、出てきてませんが。
問題練習では見あたらないけど、そちらにはあったのですね。
削除ありがとうございました。