Haskell QuickCheck唯一随机数生成

Mar*_*ark 4 haskell quickcheck

有谁知道如何使用QuickCheck在Haskell中定义生成器,以便仅一次选择所选元素?

我已经意识到我可能需要一个“ Gen(也许是肯定的)”生成器,但是当然,它会重复生成数字。我想要这样,以便选择的数字不会重复。在返回数字的情况下,我想只返回,而在所有随机数都用完的情况下,我要不返回任何信息。

谢谢,

标记

ham*_*mar 5

你不能 看一下的定义Gen。它无法对到目前为止所选择的内容进行任何陈述。给定相同的随机发生器和大小限制,它必须始终产生相同的结果。但是,您可以编写一个不重复的值列表。一个简单(但有些天真)的东西就是这样。Eq a => Gen [a]

uniques :: Eq a => Gen a -> Gen [a]
uniques gen = fmap nub $ listOf gen
Run Code Online (Sandbox Code Playgroud)

  • xorshift随机生成器在设计上没有重复。你可以试试看。(以上说明适用于前2 ^ 64个左右的数字。 (2认同)