在Haskell范围内生成随机整数 - 代码日志

在Haskell范围内生成随机整数

如何在不使用任何种子的范围内(a,b)在Haskell中生成随机数?

该函数应返回Int而不是IO Int。
我有一个函数X接受和Int和其他参数,并输出一些不是IO的东西。

如果不可能,那么如何使用Time库生成一个种子,并在mkStdGen的范围内生成一个随机数?

任何帮助将非常感激。

一个函数不能返回没有IO的Int,除非它是一个纯函数,即给定相同的输入,你将始终得到相同的输出。这意味着如果你想要一个没有IO的随机数,你将需要一个种子作为参数。

>如果你选择种子,它应该是StdGen类型,你可以使用randomR从它生成一个数字。使用newStdGen创建一个新的种子(这必须在IO中完成)。

> import System.Random
> g <- newStdGen
> randomR (1, 10) g
(1,1012529354 2147442707)

randomR的结果是一个元组,其中第一个元素是随机值,第二个元素是用于生成更多值的新种子。
>否则,您可以使用randomRIO直接在IO monad中获取随机数,所有StdGen内容都会为您处理:

> import System.Random
> randomRIO (1, 10)
6
http://stackoverflow.com/questions/8416365/generate-a-random-integer-in-a-range-in-haskell

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:在Haskell范围内生成随机整数