它并不快(比什么?),它与尾调用优化无关(在这里抛出一个流行词还不够,还应该解释为什么尾调用优化应该比循环更快?根本不是这样! )
请注意,相反,我不是函数式编程的仇恨者!但是传播神话并不适用于函数式编程。
顺便说一句,这里有没有人实际尝试过计算(和打印,这应该消耗至少 50% 所需的 CPU 周期)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% 的时间。
因此,功能性更快是一个神话,功能性更慢。这甚至不是一个神话,只要一个人不说它的速度更快/更慢,这简直就是胡说八道。