简单Haskell Fibonacci实现中的分析错误

简单Haskell Fibonacci实现中的分析错误,haskell,fibonacci,Haskell,Fibonacci,我曾尝试制作一个迭代/尾部递归版本的函数来计算斐波那契序列的第n个数,但我得到了解析错误(可能是不正确的缩进)。为什么会这样?我正在使用的代码: fib n | n < 2 = n | otherwise = fibhelper 0 1 2 n where fibhelper a b curr num | curr == num = a + b | curr < num = fibhelper b (a+b) (curr

我曾尝试制作一个迭代/尾部递归版本的函数来计算斐波那契序列的第n个数,但我得到了
解析错误(可能是不正确的缩进)
。为什么会这样?我正在使用的代码:

fib n
    | n < 2 = n
    | otherwise = fibhelper 0 1 2 n
    where fibhelper a b curr num
          | curr == num = a + b
          | curr < num = fibhelper b (a+b) (curr+1) num
fib n
|n<2=n
|否则=0 1 2 n
其中有一个b curr num
|curr==num=a+b
|curr
明确地说,我试图理解错误——为什么会发生,应该如何纠正——而不是试图有效地实现
fib
(例如,我已经理解了流行的
zipWith
实现)


谢谢

防护部件必须相对于函数名缩进至少一个字符。因此,以下方法有效:

fib n
    | n < 2 = n
    | otherwise = fibhelper 0 1 2 n
    where fibhelper a b curr num
           | curr == num = a + b  -- moved one character to the left.
           | curr < num = fibhelper b (a+b) (curr+1) num
fib n
|n<2=n
|否则=0 1 2 n
其中有一个b curr num
|curr==num=a+b——向左移动了一个字符。
|curr
Aha!一定是那样的,但我不确定是什么。谢谢你的帮助!谢天谢地,你很快就得到了一个好答案。如果可以,请务必说明编译器将错误放在了哪里,而不仅仅是错误是什么。不过,再次祝贺你得到了一个快速、好的答案。