gpt4 book ai didi

haskell - 没有重复的随机数

转载 作者:行者123 更新时间:2023-12-01 08:55:46 25 4
gpt4 key购买 nike

模拟从 40 个数字中选出的 6 个数字的彩票,我想使用系统随机生成器在 Haskell 中创建一个数字列表,但要消除经常出现的重复数字。

如果我有以下情况:

import System.Random

main :: IO ()
main = do
rs <- forM [1..6] $ \_x -> randomRIO (1, 40) :: (IO Int)
print rs

这是一半。但是如何过滤掉重复项?在我看来,我需要某种 while 循环来构造一个列表,过滤列表中已经存在的元素,直到列表达到所需的大小。如果我可以生成一个无限的随机数列表并在 IO monad 中对其进行过滤,我相信这会起作用,但我不知道如何解决这个问题。似乎在 Haskell 中通常不推荐使用 while 循环,所以我不确定 Haskeller 的真正方式。这是否是 while 循环的合法用例,如果是,如何做到这一点?

最佳答案

您要查找的函数是nubData.List,过滤重复项。

import Data.List
import System.Random

main = do
g <- newStdGen
print . take 6 . nub $ (randomRs (1,40) g :: [Int])

关于haskell - 没有重复的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27727980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com