値を生成した後、その値にもとづいて次に使用するジェネレータを決定する、すなわち
ジェネレータを別のジェネレータに依存させるためにはflatMapが必要ということのようだ。
Exercise6.6 flatMapを実装し、それを使ってもう少し動的なlistOfNを実装せよ。Genクラスに配置。
def flatMap[B](f: A => Gen[B]): Gen[B] =
Gen(sample.flatMap(a => f(a).sample))
ここでsample.flatMapのsampleはState[RNG,A]で、f(a):Gen[B]だからf(a).sampleはState[RNG,B]
ということか?とすればGenのカッコの中はState[RNG,B]だからGen[B]が返されている。
def listOfN(size: Int): Gen[List[A]] =
Gen.listOfN(size, this)
これを使うと、下のようになる?
def listOfN(size: Gen[Int]): Gen[List[A]] =
size flatMap (n => this.listOfN(n))
わかったような、わからないような。。難しい
0 件のコメント:
コメントを投稿