[英]Why does `take` with a large number return [] even though the list is infinite?
我懷疑為什么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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.