使用Rng库的随机值流

时间:2014-12-08 15:40:02

标签: scala random stream scalaz

我正在查看Rng来源,了解它们如何生成随机值流。

def stream[AA >: A](s: Size): Rng[EphemeralStream[AA]] = 
  list(s) map (EphemeralStream(_: _*))

首先,我对此签名感到困惑。我需要一个无限流的生成器,它可以懒惰地生成随机值。所以我不需要size参数。

我也对实施感到困惑。生成器似乎创建了一个列表,然后转换为流。然而,流的整个要点是懒惰。我错过了什么?

1 个答案:

答案 0 :(得分:2)

我不了解Stream,但我们可以使用scalaz-stream Process明确地做出类似的事情:

def infiniteRandomProcess: Process[Rng, Int] =
  Process.await(Rng.int)({
    i => Process.emit(i) ++ infiniteRandomProcess
  })

然后你改变了懒惰的Process,直到你得到了run(或runLog左右)的某些内容,并最终获得{{1}值(或者可能是将其与例如Rng组合在一起的monad变换器。)

API可能允许将其转换为Task;那里有很多,我倾向于留在浅水区。