【发布时间】:2010-12-03 18:15:29
【问题描述】:
我是 Haskell 的新手,我希望能够对给定函数调用或代码 sn-p 的运行时间进行计时。
在 Clojure 中,我可以使用“time”:
user=> (time (apply * (range 2 10000)))
"Elapsed time: 289.795 msecs"
2846259680917054518906413212119868890148051...
在 Scala 中,我可以自己定义函数:
scala> def time[T](code : => T) = {
| val t0 = System.nanoTime : Double
| val res = code
| val t1 = System.nanoTime : Double
| println("Elapsed time " + (t1 - t0) / 1000000.0 + " msecs")
| res
| }
time: [T](=> T)T
scala> time((1 to 10000).foldLeft(1:BigInt)(_*_))
Elapsed time 274.292224 msecs
res0: BigInt = 284625968091705451...
如何在 Haskell 中编写等效于我的 Scala 函数或 Clojure 的“时间”的函数?我在 Hackage 上找到的 System.TimeIt module 不够通用,因为它仅在测量 IO 计算时才有效。所以timeIt(4 + 4) 不起作用,只有timeIt(print $ 4 + 4),它很快就会变得烦人。另外,我真的很想看看 Haskell 是如何处理一般情况的。
谢谢!
【问题讨论】:
标签: scala haskell time clojure benchmarking