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
.
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)