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
我不明白爲什麼會這樣。 幫我謝謝。
雖然這不是真的,因爲'(/)'的類型是'分數a => a - > a - > a';事實上,由於他強迫'difffibonaccimap'在下一行是'Double',因此'10^12'必須是雙倍。 – 2010-10-20 15:26:43
Adam只是誤解了'(^)'的類型,它是'(數字a,積分b)=> a - > b - > a'。 「Num a」類中的結果使得Double成爲可能。 (**):: Floating a => a - > a - > a'使得許多人錯誤地認爲'(^)'是'(**)'的整數版本,這不是一個不合理的誤解。 – 2010-10-20 23:51:26
@TomMD:你有我。我假設'(^)'是'積分a => a - > a - > a'或類似的東西。 – 2010-10-21 00:19:38