1

主要有几个输出信息的功能。

我需要测量他们的执行时间。

目前它是这样完成的:

  start <- getCurrentTime
  putStrLn $ show $ findNthMinLinear (getTestArrayOfLength (read arrlength :: Int)) 4
  stop <- getCurrentTime
  print $ diffUTCTime stop start

我想将每个函数包装在一个函数中 1. 记住时间 2. 评估函数 3. 记住时间 4. 打印两个记住时间之间的差异

问题是我不知道如何在不先评估它的情况下传递一个函数。

我的猜测是,例如,如果我写 (<5),即我创建一个返回函数的函数,那么在我传递最终参数之前不会做任何实际工作我猜?然后我可以写

printAndMeasure :: (a -> IO()) -> IO ()
...
printAndMeasure \x -> (getTestArrayOfLength (read arrlength :: Int)) 4

但这是一个草率的解决方案,因为我真的不需要这个 x 除了阻止函数被执行。

4

1 回答 1

6

传递函数不会评估它。因此,您可以拥有类似的功能IO () -> IO ()并将IO操作传递给它们。当程序运行时,只main执行函数,并且直到需要时才评估函数的参数(惰性)。如果您尝试对代码进行基准测试,那么最好使用基准测试库,例如Criterion.

于 2012-11-02T13:42:26.697 回答