在计算Fibonacci数字时存在错误 - Haskell

时间:2015-04-17 20:42:11

标签: haskell monads fibonacci state-monad

我在一些评判系统中解决了不同的问题。今天我想用State Monad计算斐波纳契数。我的代码运行良好,它通过了我所有的测试。但是有一些错误(一个测试失败),我无法确定。

我的代码是:

fib :: Int -> Integer
fib n = fst $ execState (replicateM n fibStep) (0,1)

fibStep :: State (Integer,Integer) ()
fibStep = do modify (\(a, b) -> (b, a + b))

你能帮我找到错误吗?我不知道,错误在哪里。

1 个答案:

答案 0 :(得分:4)

我认为您的代码是正确的,使用来自here

的天真实现fib0进行测试
import Control.Monad.State

fib :: Int -> Integer
fib n = fst $ execState (replicateM n fibStep) (0,1)

fibStep :: State (Integer,Integer) ()
fibStep = do modify (\(a, b) -> (b, a + b))

fib0 0 = 0
fib0 1 = 1
fib0 n = fib0 (n-1) + fib0 (n-2)

我试过了:

*Main> map (\x -> fib x - fib0 x) [1..25]

得到了

[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

您的功能似乎与预期的结果相同。