在Haskell中运行多次函数

时间:2017-08-25 23:25:44

标签: haskell

我之前创建了这个函数来生成(m,n)范围内的整数随机数。

giveRand :: Random c => c -> c -> c
giveRand m n = unsafePerformIO . getStdRandom $ randomR (m,n)

从这种情况来看,我想用相同的参数多次运行它,这样它就会返回给定范围内随机生成的值列表。我尝试了复制功能,但它只复制了giveRand的结果。它没有创建该函数的多个副本并重新评估它。

从这个问题我想知道是否有一个函数允许我使用相同的参数多次运行任何函数。我问这个例子,即使使用相同的范围输入,也可能出现不同的值。

那么,Haskell中是否有任何函数可以让我使用相同的参数多次运行函数?

1 个答案:

答案 0 :(得分:8)

忘记unsafePerformIO;承认你正在做一些有状态的事情。以下是:

Control.Monad System.Random> replicateM 3 (randomRIO (5,7))
[6,7,5]

如果您不能执行IO,您还可以使用State monad明确表示状态:

Control.Monad.State System.Random> runState (replicateM 3 (state (randomR (5,7)))) (mkStdGen 0)
([7,7,5],1346387765 2103410263)