![](/img/trans.png)
[英]Why do we need 'seq' or 'pseq' with 'par' in Haskell?
[英]About 'pseq' in Haskell
請考慮以下兩個陳述:
(a `par` b) `pseq` (a + b)
和
a `par` (b `pseq` (a + b))
有人可以解釋他們的行為如何彼此不同嗎?
對於第一個,如果主線程完成了計算b
但火花計算a
還沒有完成,主線程是否會繼續計算a + b
?
par ab
在語義上等同於b
,但它給出了提示,即開始評估早期可能是有用a
。 在otherhand pseq
迫使其第一個參數的評價,而只是在它的第二個參數(懶惰)身份的功能。
所以,
(a `par` b) `pseq` (a + b)
在語義上等同於
b `pseq` (a + b)
這相當於
a `par` (b `pseq` (a + b))
因為兩者都說“評估b
然后成為th a + b
”。 鑒於par
的后果par
沒有其他差異可以從語言定義中發現。 相反,在您的特定編譯器/運行時,它們可能會做稍微不同的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.