綜觀今天我的代碼的功能,我想知道是否有可能部分組合和優化組合:F#:局部應用的預先計算
let foo (X:float) y1 y2 dx =
y1 + (y2 - y1) * dx/X
基本上,只要施加一個比 - 這樣的前三個參數在給定的循環內通常是相同的。
我想也許如果我只是這樣做:
let foo2 (X:float) y1 y2 dx =
let dy = (y2 - y1)/X
y1 + dy * dx
F#會弄巧,優化對我來說,當我部分申請前三個參數,但調試模式下,它不會出現這樣的情況(儘管我不確定我是否以正確的方式進行了測試)。
問題是,應該這樣工作嗎?如果不是,有沒有更好的方式來做到這一點(除了用兩個參數編寫另一個函數外)?
另外,這就是爲什麼人們需要例如.Net中的「PureAttribute」,你可以把它放在'昂貴'(假設它不打印,不像我的展示例子),以便將編譯器推進到這種優化中。或者,這就是人們喜歡Haskell的原因,一切都是純粹的,編譯器/運行時可以「緩存」任何函數調用。 在這一天結束時,我個人的觀點是希望系統能夠「神奇地優化」這個,因爲你是一個夢想。如果你想讓你的代碼變得更快,請逐步向Computer先生詳細說明。人類必須始終努力工作。 – Brian 2009-09-16 07:46:24
你的這個波特率和我的大腦完全一樣:) – Benjol 2009-09-16 08:16:25