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