Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell,测量函数的CPU时间_Haskell_Lazy Evaluation - Fatal编程技术网

Haskell,测量函数的CPU时间

Haskell,测量函数的CPU时间,haskell,lazy-evaluation,Haskell,Lazy Evaluation,我需要测量函数的CPU时间,如下所示: t <- getCPUTime res <- callTheFunction input t' <- getCPUTime print $ t' - t t使用Control.Exception中的函数evaluate::a->IO a。当执行相应的IO操作时,它将其参数求值为WHNF。但是,您必须确保WHNF足以满足您的功能。如果您尝试进行基准测试,请使用优秀的标准库,该库位于Hackage上。如果您正在进行基准测试,则应使用。否则使

我需要测量函数的CPU时间,如下所示:

t <- getCPUTime
res <- callTheFunction input
t' <- getCPUTime
print $ t' - t

t使用
Control.Exception
中的函数
evaluate::a->IO a
。当执行相应的IO操作时,它将其参数求值为WHNF。但是,您必须确保WHNF足以满足您的功能。

如果您尝试进行基准测试,请使用优秀的标准库,该库位于Hackage上。

如果您正在进行基准测试,则应使用。否则使用(rnf)并强制求值。

问题是,特别是在IO上下文中,
seq
rnf
通常不够强大,无法将表达式求值到所需的级别。@fuzzxl我不清楚您的意思。如果您在任何时候(IO操作之前或之后)有一个类型为
NFData=>a
的值,那么bang模式和
rnf
就足够了(在许多情况下肯定比WHNF好)。这根本不能解决您的严格性问题(使用evaluate进行评估),但用于快速而肮脏的计时(即比标准简单)您可以只使用timeIt包:注意WHNF通常是不够的。例如,列表的WHNF只是第一个缺点。您可以将评估和强制执行相结合。
t <- getCPUTime
res <- callTheFunction input
evaluate res  OR  return $! res
t' <- getCPUTime
print $ t' - t