1

以下代码命名为fib.hs

import Criterion.Main (defaultMain)
fibZ = 1:1:zipWith (+) fibZ (tail fibZ)
main = defaultMain [
         bench "fibZ 10" $ \n -> fibZ (10+n-n)
       ]

错误与

fib.hs:45:10: Not in scope: `bench'

怎么了?我从这里借用了这个例子。

4

2 回答 2

8

利用

import Criterion.Main

代替

import Criterion.Main (defaultMain)

函数benchfromCriterion.Main不在范围内,因为您只导入defaultMain. bgroup不需要使用。

这是一个完整的工作示例:

import Criterion.Main

fib :: Int -> Int
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)

main = defaultMain [
         bench "fib 10" $ nf fib 10
       , bench "fib 30" $ nf fib 30
       , bench "fib 35" $ nf fib 35
       ]

如果您想知道这些nf东西的用途,请查看文档的这一部分

于 2011-10-19T22:40:33.590 回答
3

自从那篇博客文章写完后,图书馆发生了变化。现在你应该写:

 import Criterion.Main

 fib :: Int -> Int
 fib 0 = 0
 fib 1 = 1
 fib n = fib (n-1) + fib (n-2)

 main = defaultMain [
        bgroup "fib" [ bench "fib 10" $ B fib 10
                     , bench "fib 35" $ B fib 35
                     , bench "fib 37" $ B fib 37
                     ]
                    ]

这直接取自Criterion.Main 的 Hackage 文档的“运行基准测试”部分。

于 2011-10-19T22:33:46.777 回答