ブリーズのディストリビューションに関するドキュメントで見た例に頭を悩ませています。
Rand インスタンスを作成すると、次のことができることが示されます。
import breeze.stats.distributions._
val pois = new Poisson(3.0);
val doublePoi: Rand[Double] = for(x <- pois) yield x.toDouble
これは非常にクールです。メソッドを呼び出すDouble
代わりに取得できる Rand オブジェクトを取得できます。別の例は次のとおりです。Int
samples
val abc = ('a' to 'z').map(_.toString).toArray
val letterDist: Rand[String] = for(x <- pois) yield {
val i = if (x > 26) x % 26 else x
abc(i)
}
val lettersSamp = letterDist.samples.take(20)
println(letterSamp)
問題は、ここで何が起こっているのかということです。Rand[T]
はコレクションではなく、これまでに見た for/yield の例はすべてコレクションで動作します。scala のドキュメントにはあまり言及されていません。ここでの基本的なルールは何ですか? これを他にどのように使用できますか(簡単な回答である必要はありません)