Как бы вы (пере) реализовали итерацию в Haskell?
iterate :: (a -> a) -> a -> [a]
(Как вы наверное знаете)iterate
это функция, которая принимает функцию и начальное значение. Затем он применяет функцию к начальному значению, затем он применяет ту же функцию к последнему результату и так далее.
Prelude> take 5 $ iterate (^2) 2
[2,4,16,256,65536]
Prelude>
Результатом является бесконечный список. (вот почему я используюtake
). Мой вопрос, как бы вы реализовали свойiterate'
функция в Haskell, используя только основы ((:)
(++)
лямбды, выкройки, охранники и т. д.)?
(Начинающий Хаскель здесь)