簡體   English   中英

評估列表到弱頭范式

[英]Evaluating List to Weak Head Normal Form

給出以下從1到100的列表:

> let x = [1..100]

我運行sprint x來觀察其未評估的價值。

> :sprint x
x = _

然后,我運行seq將其評估為Weak Head Normal Form:

> seq x ()
()

但重新運行sprint x顯示( 我認為 )是相同的值。

> :sprint x
x = _

這是為什么?

我認為這個bheklilr的評論應該標記為答案:

x的類型是什么? 如果它是(Num a, Enum a) => [a]那么這將無法按預期工作。 試試let x = [1..100] :: [Int ]。 實際上,當您使用更通用的類型打印x時,GHCi將其專門用於Integer進行打印。 這意味着您看到的打印值實際上並不存儲在x的thunk中。 使用具體類型可以避免此問題。

使用David Young的附加說明,當啟用單態限制時,在7.8之前的GHCi版本上不會出現此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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