2

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

Prelude> take 1000000000000 $ repeat ' '

该行代码将返回:

""

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

如果我尝试少一个零,它会打印很长时间。

而最困扰我的是,如果我只是写

Prelude> repeat ' '

它会起作用,即使是更多的零。

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

4

1 回答 1

11

你是32位系统吗?我怀疑 1000000000000 会Int变成一个负数。它等于大约2^40

你可以通过输入来检查发生了什么1000000000000 :: Int

take负数只返回空列表:

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

仅供参考,take只需要Int

Prelude> :t take
take :: Int -> [a] -> [a]
于 2013-05-18T17:18:41.433 回答