gpt4 book ai didi

haskell - 在 Haskell 中生成一个范围内的随机整数,无需种子

转载 作者:行者123 更新时间:2023-12-02 23:20:57 33 4
gpt4 key购买 nike

如何在 Haskell 中从范围 (a, b) 生成随机数而不使用任何种子?

该函数应返回 Int,而不是 IO Int。我有一个函数 X,它接受 Int 和其他参数并输出一些不是 IO 的内容。

如果这是不可能的,我如何使用 Time 库生成种子并使用 mkStdGen 生成范围内的随机数?

任何帮助将不胜感激。

最佳答案

如果没有 IO,函数就无法返回 Int,除非它是纯函数,即给定相同的输入,您将始终得到相同的输出。这意味着,如果您想要一个没有 IO 的随机数,则需要将种子作为参数。

使用random库:

  • 如果您选择获取种子,则其类型应为 StdGen,并且您可以使用 randomR 从中生成数字。使用 newStdGen 创建一个新种子(这必须在 IO 中完成)。

     > import System.Random
    > g <- newStdGen
    > randomR (1, 10) g
    (1,1012529354 2147442707)

    randomR 的结果是一个元组,其中第一个元素是随机值,第二个元素是用于生成更多值的新种子。

  • 否则,您可以使用 randomRIO 直接在 IO monad 中获取随机数,并获取所有 StdGen 内容为您服务:

     > import System.Random
    > randomRIO (1, 10)
    6

关于haskell - 在 Haskell 中生成一个范围内的随机整数,无需种子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8416365/

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