Алгоритм определения преимуществ функции запоминания
проблема
Допустим, у меня есть некоторый язык программирования с только ссылочно-прозрачными функциями. Хорошо известно, что любая из этих функций может быть запомнена. Однако не всегда стоит запоминать функции с точки зрения времени или пространства. Что такое алгоритм для решения, будет ли он экономить место или время для автоматического запоминания функции?
пример
# likely to benefit from memoization
def fact(n):
return 1 if n == 0 else n * fact(n - 1)
# unlikely to benefit from memoization
def inc(x):
return x + 1
Мой вариант использования
У меня есть интерпретатор Lisp в качестве побочного проекта, который ограничивается чисто функциональным подмножеством Lisp. Я хочу запоминать функции, но я не хочу слепо решать, что следует и не следует запоминать.
Дополнительная информация
Решение может либо работать с использованием статического анализа кода, либо работать в течение всей жизни программы, либо работать в течение нескольких запусков программы.
Решение не должно быть идеальным; это может быть просто эвристика, которая подходит много времени.