Haskell - 生成并使用相同的随机列表

时间:2015-06-23 05:25:01

标签: haskell random

在Haskell中,我想生成Int的随机列表,并在整个程序中使用它。我当前的解决方案导致每次访问/使用它时都会随机创建数组。

我该如何克服这个问题?

2 个答案:

答案 0 :(得分:2)

这是一个简单的例子(@luqui提到)你应该能够概括你的需要:

module Main where

import Control.Monad (replicateM)
import System.Random (randomRIO)

main :: IO ()
main = do
  randomList <- randomInts 10 (1,6)
  print randomList
  let s = myFunUsingRandomList randomList
  print s

myFunUsingRandomList :: [Int] -> Int
myFunUsingRandomList list = sum list

randomInts :: Int -> (Int,Int) -> IO [Int]
randomInts len bounds = replicateM len $ randomRIO bounds

备注

  • randomInts是一个IO - 动作会生成随机的整数列表,您可以在main {{1}的第一行中看到它的使用}}-块。一旦使用它,列表将保持不变。
  • do是一个非常简单的例子(只是总结它),以纯粹的方式使用这样的列表 - 实际上它只需要一个整数列表,我恰好用{{{}的随机列表来调用它。 1}}

答案 1 :(得分:0)

关注此example。然后,将rsmain传递给任何需要它的函数。

如果不使用像unsafePerformIO这样的东西,你就不能有这个全局变量,正如名称所示,不应该使用IO。原因是选择随机数是一种固有的非确定性操作,取决于外部select SUM(number) from( select case when(aa.number>(select SUM(bb.number) from bb where bb.sharedid=aa.id))then aa.number else 0 end as number from aa )abc 状态。