gpt4 book ai didi

Haskell Random 无法构造无限类型 : a1 = IO a1

转载 作者:行者123 更新时间:2023-12-02 02:51:15 25 4
gpt4 key购买 nike

我想用 Haskell 生成一个包含 26 个随机整数的列表,其总和为 301。我写了以下内容:

import System.Random

f 1 sum = [sum]
f n sum = m : (f (n-1) (sum-m))
where m = randomRIO (0,sum)

但是不能编译!我对IO感到困惑!

Occurs check: cannot construct the infinite type: a1 = IO a1
In the first argument of `(:)', namely `m'
In the expression: m : (f (n - 1) (sum - m))
In an equation for `f':
f n sum
= m : (f (n - 1) (sum - m))
where
m = randomRIO (0, sum)

最佳答案

在这种情况下,错误消息有些令人困惑,但重点是您需要在 IO 中工作。 monad,因为它使用 randomRIO这是在 IO ,并且(按设计)无法运行 IO来自非 IO 的代码代码。

f 1 sum = return [sum]
f n sum = do
x <- randomRIO (0, sum)
xs <- f (n - 1) (sum - x)
return (x : xs)

关于Haskell Random 无法构造无限类型 : a1 = IO a1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13191784/

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