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

发布于 2024-10-08 02:48:46 字数 511 浏览 5 评论 0原文

我尝试制作函数的迭代/尾递归版本来计算斐波那契数列的第 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 (我理解流行的 <例如,code>zipWith 实现已经此处)。

谢谢!

I've tried to make an iterative/tail-recursive version of a function to compute the nth number of the Fibonacci sequence, but I'm getting parse error (possibly incorrect indentation). Why is this happening? The code I'm using:

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

To be clear, I'm trying to understand the error - why it's happening, how it should be corrected - and not trying to implement fib efficiently (I understand the popular zipWith implementation here already, for instance).

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

趁微风不噪 2024-10-15 02:48:46

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

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

The guard part has to be indented at least one character relative to the function name. The following thus works:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文