我是Haskell的新手,我对函数调用的成本感到困惑,这对我来说似乎是完全不合理的,并且让我觉得我做的事情从根本上是错误的.
考虑以下Haskell代码:
module Main where
logistic x = 4.0*x*(1.0-x)
lg :: Double -> Int -> Double
lg !x 0 = x
lg !x !n = lg (logistic x) (n-1)
main = putStrLn $ show $ lg 0.7861 100000000
Run Code Online (Sandbox Code Playgroud)
用命令编译它
ghc -O3 -XBangPatterns -o tsths tst.hs
Run Code Online (Sandbox Code Playgroud)
并运行它,我得到:
real 0m15.904s
user 0m15.853s
sys 0m0.016s
Run Code Online (Sandbox Code Playgroud)
如果不是调用函数,logistic
而是计算内联表达式:
module Main where
lg :: Double -> Int -> Double
lg !x 0 = x
lg !x !n = lg (4.0*x*(1.0-x)) (n-1)
main = putStrLn …
Run Code Online (Sandbox Code Playgroud)