在Haskell中创建特定列表中的随机数

时间:2013-10-08 05:30:51

标签: haskell random

我知道Haskell提供了一个在一定范围之间产生随机数的函数。

有没有办法从一组数字中产生随机数?

示例:假设[1, 6, 9]列表存在,我希望随机数不在此列表中,即1或6或9。

1 个答案:

答案 0 :(得分:5)

当然,有很多方法可以完成这项任务。也许最直接的是1)获得0length list - 1之间的随机数2)使用该数字来索引列表(list !! rand)。

例如,如果您可以使用随机数生成IO monad,那么您可以使用randomRIO

import System.Random

oneOf :: [a] -> IO (Maybe a)
oneOf [] = return Nothing
oneOf list = do
   rand <- randomRIO (0,length list - 1)
   return (Just $ list !! rand)