如何生成一个包含Haskell范围内给定数量的随机数的列表?

n00*_*00b 4 random haskell list

我知道如何在给定范围内生成单个随机数,随机数列表,包含给定数量的随机数的列表,但不包含包含RANGE内给定数量的随机数的列表.谁可以帮我这个事?

这段代码(从haskell.org中提取)生成一个包含10个随机数的列表,但是我需要给出一个范围,任何关于如何编辑它以提供范围的想法?

import System.Random
import Data.List

main = do
 seed  <- newStdGen
 let rs = randomlist 10 seed
 print rs

randomlist :: Int -> StdGen -> [Int]
randomlist n = take n . unfoldr (Just . random)
Run Code Online (Sandbox Code Playgroud)

iva*_*anm 11

randomList :: (Random a) => (a,a) -> Int -> StdGen -> [a]
randomList bnds n = take n . randomRs bnds
Run Code Online (Sandbox Code Playgroud)

使用randomRs来自System.Random.


oli*_*ver 5

quickcheck也可用于生成随机数,实际上非常好的组合器使得配置生成器更容易理解.
要使用它,您只需要导入一个模块:

import Test.QuickCheck
Run Code Online (Sandbox Code Playgroud)

然后可以按以下方式定义生成器:

t :: Int -> (Int,Int) -> Gen [Int]
t n r = vectorOf n (choose r)
Run Code Online (Sandbox Code Playgroud)

要运行此生成器,您可以使用sample':

randomList n r = head `fmap` (sample' $ t n r)
Run Code Online (Sandbox Code Playgroud)