【发布时间】:2012-08-15 04:55:19
【问题描述】:
这是一个 Haskell 函数,它接受一个数字 n 并返回第 n 个斐波那契数。 (我使用了索引方案,第 0 个数字是 0,第一个数字是 1,第 2 个数字是 1,第 3 个数字是 2,依此类推。)
fib :: (Integral a) => a -> a
fib 0 = 0
fib n = fibhelper n 0 1
fibhelper :: (Integral a) => a -> a -> a -> a
fibhelper 1 x y = y
fibhelper n x y = fibhelper (n-1) y (x+y)
现在,假设为了提高效率,我想绕过 Haskell 的惰性求值并强制对更新的参数求值(例如,使用 $! 运算符?)什么是最优雅/惯用的方式这样做?
【问题讨论】:
-
您可能正在寻找bang patterns。
标签: haskell pattern-matching lazy-evaluation fibonacci tail-recursion