这不快(比什么?),并且它与尾部呼叫优化无关(仅在这里引入流行词是不够的,还应该解释为什么尾部呼叫优化应该比循环更快),但事实根本不是这样!
请注意我不是一个功能性编程仇恨,相反!但是传播神话并不适用于函数式编程。
顺便说一句,这里有任何一个实际上尝试需要多长时间来计算(和打印,这应该消耗至少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