在简单的Haskell Fibonacci实现中解析错误

时间:2010-12-15 15:47:28

标签: haskell fibonacci

我试图制作一个迭代/尾递归版本的函数来计算第i个数量的Fibonacci序列,但我得到了parse error (possibly incorrect indentation)。为什么会这样?我正在使用的代码:

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(我理解流行的zipWith实现{{例如,已经3}}。

谢谢!

1 个答案:

答案 0 :(得分:8)

防护部件必须相对于函数名称缩进至少一个字符。因此以下工作:

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