functional languages的一个属性是函数没有副作用,因此相同的输入应始终产生相同的输出。似乎这些语言可以轻松地从memoization中获益。
但是,至少关于Erlang,函数调用没有默认的memoization。是否有任何特殊原因,Erlang(以及我所知的其他函数语言)默认情况下(或使用简单的触发器)进行记忆,或者至少对记忆有明确的支持?
记忆化有什么本质上的错误吗?
我能想象的一个原因是,通过记忆,你的记忆足迹会迅速增长。是的,但Erlang已经在VM上运行并管理内存,所以我猜它可以驯服缓存并防止它们很容易增长。
相关:
修改:
答案 0 :(得分:5)
这个问题有很多错误的假设。
函数式语言的一个属性是函数没有副作用
不正确,只有“纯功能语言”才有这样的约束。 Erlang不是纯粹的功能。 它允许功能中的任意副作用。
有没有特别的原因,Erlang(以及我所知的其他函数语言)默认(或使用简单的触发器)进行memoize,或者至少对memoization有明确的支持?
没有语言(至少非玩具语言)实现所有函数调用的默认memoization。为什么?随之而来的是大量的空间泄漏。