簡體   English   中英

關於Haskell中的'pseq'

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

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