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