Usando itertools para aplicação de função recursiva
Eu preciso de uma função Pythoniterate(f, x)
que cria um iterador retornando os valores x, f (x), f (f (x)), f (f (f (x))), etc (como, por exemplo,Clojure'siterate
). Primeiro de tudo, eu estava pensando: isso já existe em algum lugar da biblioteca padrão e eu só estou perdendo isso? Claro que é fácil de implementar com um gerador:
def iterate(f, x):
while True:
yield x
x = f(x)
Apenas por curiosidade: Existe uma maneira mais funcional de fazer isso em Python, por exemplo? com alguns itertools ou functools magic?
No Python 3.3 isso funcionaria
def iterate(f, x):
return accumulate(repeat(x), lambda acc, _ : f(acc))
mas parece um abuso para mim. Posso fazer isso mais gentilmente?