Алгоритм определения преимуществ функции запоминания

проблема

Допустим, у меня есть некоторый язык программирования с только ссылочно-прозрачными функциями. Хорошо известно, что любая из этих функций может быть запомнена. Однако не всегда стоит запоминать функции с точки зрения времени или пространства. Что такое алгоритм для решения, будет ли он экономить место или время для автоматического запоминания функции?

пример

# 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. Я хочу запоминать функции, но я не хочу слепо решать, что следует и не следует запоминать.

Дополнительная информация

Решение может либо работать с использованием статического анализа кода, либо работать в течение всей жизни программы, либо работать в течение нескольких запусков программы.

Решение не должно быть идеальным; это может быть просто эвристика, которая подходит много времени.

0 ответов

Другие вопросы по тегам