gpt4 book ai didi

haskell - 为什么 `take` 具有很大的数字返回 [],即使列表是无限的?

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

我怀疑为什么 Haskell 无法处理以下行

Prelude> take 1000000000000 $ repeat ' '

该行代码将返回:

""

这显然不是 1,000,000,000,000 个空间。

如果我尝试减一零,它将打印很长时间。

最让我烦恼的是,如果我只写

Prelude> repeat ' '

即使有很多个零,它也会起作用。

那么,为什么 Haskell 不能像单独使用 repeat 那样长时间打印呢?

最佳答案

您使用的是 32 位系统吗?我怀疑 1000000000000 将 Int 包装成负数。大约等于 2^40

您可以输入1000000000000::Int来检查发生了什么。

take 带有负数只会返回空列表:

Prelude> take (- 1) [1,2,3]
[]

仅供引用,take 仅采用 Int:

Prelude> :t take
take :: Int -> [a] -> [a]

关于haskell - 为什么 `take` 具有很大的数字返回 [],即使列表是无限的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16626911/

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