gpt4 book ai didi

scala - 在 Haskell 中编写时间函数

转载 作者:行者123 更新时间:2023-12-03 10:15:17 26 4
gpt4 key购买 nike

我是 Haskell 的新手,我希望能够对给定函数调用或代码片段的运行时间进行计时。

在 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 的“时间”的功能? System.TimeIt module我发现 Hackage 不够通用,因为它仅在测量 IO 计算时​​才有效。所以 timeIt(4 + 4)不行,只有 timeIt(print $ 4 + 4) ,这会很快变得烦人。此外,我真的很想看看 Haskell 如何处理一般情况。

谢谢!

最佳答案

请查看为此使用标准库:

  • Timing computations in Haskell
  • Criterion ,可能是现存最好的开源基准测试/计时库
  • About Criterion

  • 只需使用标准。

    关于评估深度的说明:懒惰意味着您需要决定在计时运行期间要进行多少评估。通常,您会希望将代码简化为正常形式。 NFData 类型类允许您通过 rnf 方法执行此操作。如果对最外面的构造函数求值没问题,请使用 seq在您的纯代码上强制其评估。

    关于scala - 在 Haskell 中编写时间函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1516808/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com