Haskell中的随机数生成器

nob*_*ody 1 random haskell

我试图在Haskell mkStdGen中生成10个随机数,范围为0(含)到100(不包括).

等同于以下Java代码的东西

Random ran = new Random();
ran.nextInt(100);
Run Code Online (Sandbox Code Playgroud)

注意,我必须使用 mkStdGen

这就是我到目前为止所拥有的
rand low high seed = fst (randomR (low, high) (mkStdGen seed))
randomlist :: Int -> Int -> Int -> [Int]
randomlist l h num = take num (map (rand l h) [0..])

dav*_*420 6

import System.Random

tenPseudorandomNumbers :: Int -> [Int]
tenPseudorandomNumbers seed = take 10 . randomRs (0, 99) . mkStdGen $ seed
Run Code Online (Sandbox Code Playgroud)

请注意,这不是伪随机,因为mkStdGen需要显式种子.newStdGen如果你被允许参加比赛会更好IO.

  • 我建议重构为`pseudoRandoms :: StdGen - > Int - > [Int]`,传递生成器并绑定为参数,然后你可以以任何可用的方式获取生成器,`mkStdGen`或`newStdGen`并使用它以纯粹的方式,即使它来自IO.在最后处理'take k`可以毫无问题地留给用户. (3认同)
  • 它是伪随机的最合理定义的伪随机.正如它在维基百科中所说,"序列不是真正随机的,因为它完全由一组相对较小的初始值决定",正好描述了你的代码.(http://en.wikipedia.org/wiki/Pseudorandom_number_generator) (2认同)