iterate :: (a -> a) -> a -> [a]
(Как вы, вероятно, знаете) iterate
- это функция, которая принимает функцию и начальное значение. Затем он применяет функцию к стартовому значению, затем применяет ту же функцию к последнему результату и так далее.Как бы вы (пере) реализовать итерацию в Haskell?
Prelude> take 5 $ iterate (^2) 2
[2,4,16,256,65536]
Prelude>
Результат - бесконечный список. (поэтому я использую take
). Мой вопрос: как бы вы реализовали свою собственную функцию iterate'
в Haskell, используя только базовые сведения ((:)
(++)
lambdas, pattern mataching, guard и т. Д.)?
(начинающий Haskell здесь)
Благодарим Вас за отзыв. –
Это выглядит как вариант определения «fix» fix f = f (fix f) «похожее на ...» итерация f (fa) «вы можете использовать исправление для определения итерации: « итерация fa = fix (\ rx -> x: r (fx)) a "не то, что он лучше, просто думал id сказать :) – QuantumKarl