简单Haskell Fibonacci实现中的分析错误
我曾尝试制作一个迭代/尾部递归版本的函数来计算斐波那契序列的第n个数,但我得到了简单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
解析错误(可能是不正确的缩进)
。为什么会这样?我正在使用的代码:
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!一定是那样的,但我不确定是什么。谢谢你的帮助!谢天谢地,你很快就得到了一个好答案。如果可以,请务必说明编译器将错误放在了哪里,而不仅仅是错误是什么。不过,再次祝贺你得到了一个快速、好的答案。