我怀疑为什么Haskell无法处理以下行
Prelude> take 1000000000000 $ repeat ' '
该代码行将返回:
""
显然不是1,000,000,000,000个空格。
如果我尝试少一个零,它会打印很长时间。
最困扰我的是,如果我只是写
Prelude> repeat ' '
它会起作用,即使是更多零的很多。
那么,为什么Haskell不能像单独使用repeat
一样长时间打印?
答案 0 :(得分:11)
你是32位系统吗?我怀疑1000000000000将Int
换成负数。它等于大约2^40
。
您可以输入1000000000000 :: Int
来查看正在发生的事情。
take
只返回空列表:
Prelude> take (- 1) [1,2,3]
[]
作为参考,take
只需Int
:
Prelude> :t take
take :: Int -> [a] -> [a]