Значение последовательности Фибоначчи в haskell - PullRequest
0 голосов
/ 11 мая 2011

как получить сумму последовательности Фибоначчи, используя этот код:

fibs= 0 : 1 : zipWith (+) fibs (tail fibs)

edit: take 5 fibs дает список [0,1,1,2,3], поэтому значение 5-го элемента равно3, чтобы извлечь его, мы должны набрать: 'last (take (5 fibs))', и мы получим 3. И так далее

, если мы используем интерпретатор для поиска 5-го элемента, мы получаем список [01, 2, 3] последний элемент такой же, как и значение 5-го элемента, как получить последний элемент этого списка?Могу ли я «сделать» это, используя last, у вас есть какие-нибудь идеи, не так ли?

Ответы [ 3 ]

5 голосов
/ 11 мая 2011

Это определение дает бесконечный поток целых чисел.Последний элемент отсутствует.

Если вместо этого вы хотите проиндексировать определенный элемент из списка, вы можете сделать это с помощью оператора (!!):

> [1..] !! 7
8
4 голосов
/ 11 мая 2011

Я не совсем понимаю, о чем вы спрашиваете, но если у вас есть непустой, бесконечный (т.е. не fibs, а, например, take n fibs для некоторого n) списка, вы действительно может получить свой последний элемент, применив к нему last. В качестве альтернативы, если вы просто хотите, чтобы n-й элемент списка (начинался с нуля и предполагал, что список содержит не менее n + 1 элементов), вы можете сделать listName !! n, чтобы извлечь его.

1 голос
/ 24 сентября 2015

Ну, если вам нужен 10-й элемент списка:

last (take 10 fibs)

если вы хотите получить сумму первых 10 элементов:

sum (take 10 fibs)

Кстати, есть несколько более простое выражение для выдумок, использующее только рекурсию:

fibs = (fibgen 0 1) where fibgen a b = a : fibgen b (a+b)
...