Я только начал изучать Haskell, и в качестве упражнения попал в задачу Project Euler, где суммируются числа Фибоначчи. Мой текущий метод - эта функция, которая создает новый список со следующим элементом:
fib :: (Integral a) => [a] -> [a]
fib xs@(x1:x2:_) = (x1+x2) : xs
Я нашел функцию iterate
, которая повторно применяет функцию к ее результату. Однако результатом является список списков [[2,1],[3,2,1],[5,3,2,1],..]
. Какая альтернатива iterate
когда меня не интересуют промежуточные результаты? Я хочу сделать takeWhile
с условием последнего сгенерированного числа. Это неправильный способ думать об этом вообще?
(я видел лучшие / более короткие / изящные способы генерации последовательности Фибоначчи, поэтому я не очень хочу получать отзывы о функции fib
- но я бы хотел, чтобы она работала, неоптимальный метод или нет )