4
假設我有一個像「where」關鍵詞是懶惰嗎?
foo = 8 + f1
where f1 = 8 + 9
f2 = 8 + 10
f1
明確了功能進行評估,但f2
並不一定如此。它會是嗎?我可以看到評估每個where
表達式是一個性能問題。
假設我有一個像「where」關鍵詞是懶惰嗎?
foo = 8 + f1
where f1 = 8 + 9
f2 = 8 + 10
f1
明確了功能進行評估,但f2
並不一定如此。它會是嗎?我可以看到評估每個where
表達式是一個性能問題。
是的,這是懶惰的,所以f2
不會被評估,例如:
foo = 8 + f1
where f1 = 8 + 9
f2 = last [1..]
將被立即計算,如果它是嚴格將永遠需要。
值得注意的是,有趣的是,它明確地定義瞭如何構建一個thunk,所以你可以用它來改變一些函數的行爲,比如'foldl'。 – AJFarmar
@AJFarmar聽起來很有趣,你可以打開或刪除更多詳細信息的鏈接? – bereal
這可能很有用:https://wiki.haskell.org/Let_vs._Where。但是,您可能需要進行更廣泛的閱讀。另外,這裏是'foldl'的來源:http://hackage.haskell.org/package/base-4.8.0.0/docs/src/Data-Foldable.html#foldl%27 – AJFarmar