2013-05-19 4 views
4

Я изо всех сил пытался понять, как эта функция работает. Для n-го числа он должен рассчитать сумму трех предыдущих элементов.Как работает эта функция Haskell?

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) 

Спасибо за ваше время

+1

тип определению 'helper' в GHCI и использования': т helper', чтобы получить его тип, это даст вам намек. –

ответ

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

5

Это довольно простая рекурсивная функция. Когда вызывается с тремя элементами (я угадываю семена для последовательности) и количеством терминов, он вызывает себя, циклируя семя, оставленное одним, и добавляя новый термин (a + b + c). Когда «количество оставшихся шагов» счетчик достигает 0, кромка берется и возвращает значение текущей последовательности. Это значение передается обратно во все вызовы функций, давая окончательный вывод.

Функция f' обеспечивает простую обертку вокруг функции helper (которая выполняет описанную выше работу), обеспечивая стандартное семя и передавая запрошенный термин в качестве 4-го параметра (это объясняет математический метод Orchid).

7

Возможно, часть, которую вы пропустили что

f' = helper 0 0 1 

это то же самое, как

f' x = helper 0 0 1 x 

В противном случае, см ответ Дэйва.

2

Это как последовательность Фибоначчи, но 3 номера, а не 2:

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

где последовательность Фибоначчи

F_n = F_{n-1} + F_{n-2} 
Смежные вопросы