Haskell 在计算斐波那契数时有一个错误——哈斯克尔

Haskell 在计算斐波那契数时有一个错误——哈斯克尔,haskell,monads,fibonacci,state-monad,Haskell,Monads,Fibonacci,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)) 你能帮

我在一些评判系统中解决不同的问题。今天我想用状态单子计算斐波那契数。我的代码运行良好,并且通过了所有测试。但是有一个错误,一个测试失败了,我不能确定

我的代码是:

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的简单实现进行了测试

我试过:

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

您的函数似乎给出了与预期结果相同的结果。

我认为您的代码是正确的,使用来自fib0的简单实现进行了测试

我试过:

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

您的函数似乎给出了与预期结果相同的结果。

那么,错误是什么?什么测试失败了,以什么方式失败了?@leftaroundabout,这个评判系统没有给我测试,这是失败的。我的代码计算了错误的fib数。我使用了很多n,但我找不到错误。在这个实现中,fib1=1。如果需要fib 1=0,则需要复制项n-1 fib步骤。否则这段代码看起来不错。你能链接到你正在解决的问题的描述吗?或者在这里逐字逐句地包含来自法官的问题陈述。@Mokosha,根据这个系统的fib数的定义,fib 1=1。那么,错误是什么呢?什么测试失败了,以什么方式失败了?@leftaroundabout,这个评判系统没有给我测试,这是失败的。我的代码计算了错误的fib数。我使用了很多n,但我找不到错误。在这个实现中,fib1=1。如果需要fib 1=0,则需要复制项n-1 fib步骤。否则这段代码看起来不错。你能链接到你正在解决的问题的描述吗?或者在这里逐字逐句地包含评委的问题陈述。@Mokosha,根据本系统的fib编号定义,fib 1=1。