考慮這個功能:Haskell優化器是否在範圍內使用記憶來重複函數調用?
f as = if length as > 100 then length as else 100
由於函數是純很明顯,長度將在這兩個調用相同。我的問題是Haskell優化器是否將上面的代碼轉換爲以下代碼?
f as =
let l = length as
in if l > 100 then l else 100
如果是這樣,那麼哪個級別設置啓用它?如果沒有,那爲什麼?在這種情況下,內存浪費不可能是this answer中解釋的原因,因爲一旦函數執行完成,引入的變量就會被釋放。
請注意,這不是this question重複,因爲當地的範圍,因此可能會得到完全不同的答案。
儘管存在這個問題,ghc可能會對CSE更積極。你只需要估算你CSEing的價值。一個簡單的估計是基本類型佔用可忽略的空間。 – augustss 2013-02-26 09:14:30
@augustss同意。 – kosmikus 2013-02-26 09:39:45
'length [1 .. 1000000]> 0'是一個便宜的操作?在評估「>」之前是否必須返回「長度」?(在ghci中,當我增加列表大小時,操作會明顯減慢) – 2016-09-12 11:45:17