У меня есть программа, которая производит набор функций 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
по всем соответствующим аргументам, а затем работая вверх)?