高速ではなく(何よりも?)、テール コールの最適化とは何の関係もありません (ここで流行語を投げかけるだけでは十分ではありません。テール コールの最適化がループよりも高速であるべき理由も説明する必要があります。単純にそうではありません! )
反対に、私は関数型プログラミングが嫌いではないことに注意してください! しかし、神話を広めることは、関数型プログラミングの根拠にはなりません。
ところで、ここで実際に20000!?
やった:
main _ = println (product [2n..20000n])
これは Java にコンパイルされた JVM 言語であり、Java の大きな整数を使用します (遅いことが知られています)。また、JVM の起動コストにも悩まされます。また、これは最速の方法ではありません (たとえば、明示的な再帰はリストの作成を節約できます)。
結果は次のとおりです。
181920632023034513482764175686645876607160990147875264
...
... many many lines with digits
...
000000000000000000000000000000000000000000000000000000000000000
real 0m3.330s
user 0m4.472s
sys 0m0.212s
(Intel® Core™ i3 CPU M 350 @ 2.27GHz × 4)
C で GMP を使用しても、その時間の 50% も使用しないと安全に想定できます。
したがって、機能的であるほど速いというのは神話であり、機能的であるほど遅いです. それは神話でさえありません。より速い/遅いものと比較して言わない限り、それは単にナンセンスです。