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

时间:2012-02-04 08:54:53

标签: list haskell random

我知道如何在给定范围内生成单个随机数,随机数列表,包含给定数量的随机数的列表,但不包含包含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)

2 个答案:

答案 0 :(得分:11)

randomList :: (Random a) => (a,a) -> Int -> StdGen -> [a]
randomList bnds n = take n . randomRs bnds

使用System.Random中的randomRs

答案 1 :(得分:5)

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

import Test.QuickCheck

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

t :: Int -> (Int,Int) -> Gen [Int]
t n r = vectorOf n (choose r)

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

randomList n r = head `fmap` (sample' $ t n r)