我需要从一组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
答案 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
等,它是类似的