Как ускорить (или запомнить)последовательность взаимно рекурсивных функций

У меня есть программа, которая производит набор функций fи g, который выглядит следующим образом:

step (f,g) = (newF f g, newG f g)

newF f g x = r (f x) (g x)
newG f g x = s (f x) (g x)

foo = iterate step (f0,g0)

Где r и s — некоторые неинтересные функции из f xи g x. Я наивно надеялся, что если fooбудет списком, это будет означать, что когда я вызываю n-й f, он не будет пересчитывать (n-1)-й f, если он уже вычислил его. (как было бы, если бы fи gне были функциями). Есть ли способ запомнить это, не разрывая всю программу на части (, например. оценивая f0и g0по всем соответствующим аргументам, а затем работая вверх)?

6
задан 13 April 2012 в 04:37
поделиться