这个Haskell函数如何工作?

时间:2013-05-19 09:16:03

标签: haskell

我很难看到这个功能是如何运作的。对于第n个数,它应该计算前三个元素的总和。

f' :: Integer->Integer

f' = helper 0 0 1

 where

   helper a b c 0 = a

   helper a b c n = helper b c (a+b+c) (n-1)

感谢您的时间

4 个答案:

答案 0 :(得分:7)

也许您缺少的部分是

f' = helper 0 0 1

相同
f' x = helper 0 0 1 x

否则,请参阅戴夫的回答。

答案 1 :(得分:5)

这是一个相当简单的递归函数。当用三个元素(我猜测序列的种子)和许多术语调用时,它调用自身,将种子循环一个并添加新术语(a + b + c)。当“剩余步数”计数器达到0时,边缘情况开始并且仅返回当前序列值。该值被传递回所有函数调用,给出最终输出。

f'函数围绕helper函数提供了一个简单的包装(它完成了我上面描述的工作),提供了一个标准种子并将所请求的术语作为第4个参数传递(MathematicalOrchid很好地解释了这一点) )。

答案 2 :(得分:4)

f' 5

来调用它

下面是它将被执行的顺序:

迭代1:助手0 0 1 5

迭代2:辅助0 1(0 + 0 + 1)4

迭代3:辅助器1​​ 1(0 + 1 + 1)3

迭代4:助手1 2(1 + 1 + 2)2

迭代5:辅助2 4(1 + 2 + 4)1

迭代6:辅助者4 7(2 + 4 + 7)0 => 4

答案 3 :(得分:2)

它就像斐波那契序列,但对于3个数字,而不是2:

F'_n = F'_{n-1} + F'_{n-2} + F'_{n-3}

斐波纳契序列

F_n = F_{n-1} + F_{n-2}