這不快(比什麼?),並且它與尾部呼叫優化無關(僅在這裏引入流行詞是不夠的,還應該解釋爲什麼尾部呼叫優化應該比循環更快),但事實根本不是這樣!
請注意我不是一個功能性編程仇恨,相反!但是傳播神話並不適用於函數式編程。
順便說一句,這裏有任何一個實際上嘗試需要多長時間來計算(和打印,這應該消耗至少50%的CPU週期所需)20000!?
我所做的:
main _ = println (product [2n..20000n])
這是一個JVM語言編譯成Java,它使用Java大整數(已知慢)。它也遭受JVM啓動成本的影響。這並不是最快的方法(例如顯式遞歸可以節省列表構造)。
結果是:
181920632023034513482764175686645876607160990147875264
...
... many many lines with digits
...
000000000000000000000000000000000000000000000000000000000000000
real 0m3.330s
user 0m4.472s
sys 0m0.212s
(在英特爾®酷睿™i3 CPU中號350 @ 2.27GHz×4)
我們可以安全地假設,同樣用C符合GMP不會甚至可以使用這個時間的50%。
因此,官能更快是神話,以及官能較慢。這甚至不是一個神話,只要人們沒有說比較快/慢就說不出來。
主持人:如果認爲不合適,請將其移至合適的論壇/網站。 – PhD 2013-03-11 22:31:56
http://en.wikipedia.org/wiki/Tail-call_optimization – 2013-03-11 22:32:17
這不是更快,這是hogwash。然而,_write_通常更快。 – 2013-03-11 22:33:32