我有:
main :: IO ()
main = do
iniciofibonaccimap <- getCPUTime
let fibonaccimap = map fib listaVintesete
fimfibonaccimap <- getCPUTime
let difffibonaccimap = (fromIntegral (fimfibonaccimap - iniciofibonaccimap)) / (10^12)
printf "Computation time fibonaccimap: %0.3f sec\n" (difffibonaccimap :: Double)
listaVintesete :: [Integer]
listaVintesete = replicate 100 27
fib :: Integer -> Integer
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)但
*Main> main
Computation time fibonaccimap: 0.000 sec我不明白为什么会发生这种情况。帮帮我-谢谢。
发布于 2010-10-20 23:25:54
哈斯克尔很懒。您在行中请求的计算
let fibonaccimap = map fib listaVintesete直到你以某种方式使用了fibonaccimap的值,它才会真正发生。因此,为了测量所用的时间,您需要引入一些强制程序执行实际计算的东西。
ETA:我最初建议打印最后一个元素来强制求值。正如TomMD指出的,这远远不够好--我强烈建议阅读他在这里的回复,以获得处理这段特定代码的实际有效方法。
https://stackoverflow.com/questions/3979265
复制相似问题