我在 haskell 中创建了一个计时器。问题是,它总是返回 0。我认为这是因为懒惰,但我不知道如何解决。
import System.CPUTime
timeit::IO ()->IO (Float)
timeit io=do
start <-getCPUTime
action <-seq start io
end <-seq action getCPUTime
return $! (fromIntegral $ end-start)/(10**12)
如您所见,我投入了大量的 seq
和 $!
,但无济于事。我该怎么办?
运行示例:
*Main> timeit test
What is your name?
Haskell
Your name is Haskell.
0.0
最佳答案
这是我要工作的一些代码
import Data.Time.Clock
timeit::IO ()->IO NominalDiffTime
timeit doit=do
start <- getCurrentTime
doit
end <- getCurrentTime
return (diffUTCTime end start)
现在进行一些讨论-
从评论来看,您似乎想要实时,而不是 cpu 时间,所以这就是我写的。
System.Time 库已弃用,因此我将您切换到 Data.Time 库。
NominalDiffTime 以秒为单位保存时间....
NominalDiffTime 忽略闰秒!万一在程序运行期间添加闰秒,10 秒的延迟将显示为 11 秒。我在谷歌上搜索了如何解决这个问题,尽管 Data.Time 确实有一个 DiffTime 类型来解决这个问题,但似乎没有一种从 UTCTime 生成 DiffTime 的简单方法。我认为您可以使用 Posix 时间库并获得从 1970 年 1 月 1 日开始的秒数……然后进行比较,但这似乎是一个非常罕见的错误。但是,如果您正在编写安全着陆飞机的软件,请深入研究并解决此问题。 :)
关于haskell - 我的计时器总是返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20244185/