问题
假设我有一些只有引用透明函数的编程语言。众所周知,任何这些功能都可以被记忆。然而,在时间或空间方面记忆功能并不总是值得的。 决定是否会节省空间或时间来自动记忆功能的算法是什么?
示例
# 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子集。我想记住功能,但我不想盲目决定应该记住什么,不应该记住。
其他信息
解决方案可以使用静态代码分析进行操作,也可以在程序的生命周期内运行,也可以在程序的多次运行中运行。
解决方案不一定是完美的;它可能只是一个很好的时间的启发式。