2015年6月14日日曜日

scala関数型デザイン&プログラミング P162

値を生成した後、その値にもとづいて次に使用するジェネレータを決定する、すなわち
ジェネレータを別のジェネレータに依存させるためには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 件のコメント:

コメントを投稿