Haskell标准使用错误



以下代码命名为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'

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

使用

import Criterion.Main
不是

import Criterion.Main (defaultMain)

来自Criterion.Main的函数bench不在作用域中,因为您只导入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的东西是用来做什么的,看看这部分的文档

自从那篇博文发表以来,库已经发生了变化。现在你应该写:

 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
                     ]
                    ]

这是直接取自criteria . main的Hackage文档中的"运行基准测试"部分

相关内容

  • 没有找到相关文章

最新更新