随机数设置Haskell

时间:2016-04-23 10:21:35

标签: haskell random set

我需要从一组int中取一个随机元素。我正在尝试使用函数elemAt :: Int->Set a->a,但我需要随机生成将在elemAt的第一个参数中使用的Int,但我遇到了问题,因为randomRIO是一个monadic函数。如何在返回int的函数中使用randomRIO?E.g:

function :: Int->Int
function i = x <- randomRIO(0,i-1)

我想做的是这样的事情:

element set = elemAt (function (size set)) set

1 个答案:

答案 0 :(得分:1)

在Haskell中,我们想知道我们的函数是否纯粹 - 在你的情况下你想要实现一个显然不是纯粹的函数 - 它是随机的。

所以你应该对这个功能说实话,并在类型中注明。当然,您可以使用randomRIO,在这种情况下,您可以通过返回IO - 计算来表明这一点。

假设您想从Data.Set获取随机元素,它可能如下所示:

randomElement :: Set a -> IO a
randomElement set = do
   i <- randomRIO (0, size set - 1)
   return $ set `elemAt` i

对于Map等,它是类似的