从列表中选择一个随机元素

swaffelay

所以在我的项目中,我有一个常量函数,它返回一个数组:

import System.Random

giveList :: [Int]
giveList = [8,9,4,5,2]

我想从该列表中随机选择一个元素,如下所示:

seed::Int
seed = 40

generator = mkStdGen seed

giveRandomElement :: Int
giveRandomElement = giveList !! rand where
    n = length tetrominoes
    (rand,generator) = randomR (0,(n-1)) generator

但是,由于生成器,它不能编译,我想将生成器保留为全局变量,这样就不必继续将其提供给函数。我也不想处理IO包装器,那么我该怎么做呢?

谢谢你的帮助:-)

打字手

工作代码示例

import System.Random

seed::Int
seed = 40

giveList :: [Int]
giveList = [8,9,4,5,2]

generator = mkStdGen seed

giveRandomElement :: Int
giveRandomElement = giveList !! rand where
  n = length giveList
  (rand, _) = randomR (0,(n-1)) generator

但这可能不起作用,您想要什么。

giveRandomElement将始终产生相同的结果。它是一个纯函数,没有任何输入,因此该怎么办?它只能是恒定的。

您要么需要使用,要么需要IO通过代码线程化生成器并在某个地方跟踪它。

您得到的编译器错误:

test.hs:14:23: error:
    • Ambiguous type variable ‘g0’ arising from a use of ‘randomR’
      prevents the constraint ‘(RandomGen g0)’ from being solved.
      Relevant bindings include generator :: g0 (bound at test.hs:14:10)
      Probable fix: use a type annotation to specify what ‘g0’ should be.
      These potential instance exist:
        instance RandomGen StdGen -- Defined in ‘System.Random’
    • In the expression: randomR (0, (n - 1)) generator
      In a pattern binding:
        (rand, generator) = randomR (0, (n - 1)) generator
      In an equation for ‘giveRandomElement’:
          giveRandomElement
            = giveList !! rand
            where
                n = length giveList
                (rand, generator) = randomR (0, (n - 1)) generator
   |
14 |   (rand, generator) = randomR (0,(n-1)) generator
   |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^

是因为你定义的符号generatorgiveRandomElement在它自身而言,因此编译器不能推断出它的类型。generator在这种情况下,未使用顶层声明,因为(rand, generator) =等号后的阴影已经遮住了该符号。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从集合中选择一个随机元素

从O(1)时间中的集合中选择一个随机元素

从数组中选择一个随机元素

如何测试从列表中随机选择一个元素?

从整数列表中选择一个随机数

从C中的列表中选择一个随机节点

根据偏好从列表中选择一个元素

从数组中选择一个随机元素

根据反权重从列表中选择一个随机元素

不确定如何在python中从此列表中选择一个随机输出

从相同索引的列表元素中选择随机整数并生成一个列表

空手道-从json中选择一个随机元素

从数组中选择一个非均匀分布的随机元素

随机选择一个包含特定元素的列表

在numpy中选择一个元素

从列表的每一行中选择n个随机元素

从Haskell的列表中选择一个随机元素

将枚举JavaScript转换为数组,然后在数组中选择一个随机元素

从python中的2d数组列表中选择一个随机元素

应用发明者仅从列表中选择一个随机项一次

jQuery从获取的项目列表中选择一个元素

在XML中选择一个列表

如何使用“ Twit”库从列表中选择一个随机词

选择随机数组,然后从该数组中选择一个元素

在Java中的布尔数组中选择一个随机元素

如何从循环中的列表中选择一个随机单词?

从 HTML 中的动态数组中选择一个随机元素

我可以从 C++ 中的数组中选择一个随机元素吗?

从 Python 中随机选择的 2 个列表元素创建一个列表