簡體   English   中英

為什么`take`返回大數[],即使列表是無限的?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM