为什么默认情况下Erlang函数没有被记忆?

时间:2013-08-13 15:42:35

标签: functional-programming erlang memoization

functional languages的一个属性是函数没有副作用,因此相同的输入应始终产生相同的输出。似乎这些语言可以轻松地从memoization中获益。

但是,至少关于Erlang,函数调用没有默认的memoization。是否有任何特殊原因,Erlang(以及我所知的其他函数语言)默认情况下(或使用简单的触发器)进行记忆,或者至少对记忆有明确的支持?

记忆化有什么本质上的错误吗?

我能想象的一个原因是,通过记忆,你的记忆足迹会迅速增长。是的,但Erlang已经在VM上运行并管理内存,所以我猜它可以驯服缓存并防止它们很容易增长。

相关

修改

1 个答案:

答案 0 :(得分:5)

这个问题有很多错误的假设。

  

函数式语言的一个属性是函数没有副作用

不正确,只有“纯功能语言”才有这样的约束。 Erlang不是纯粹的功能。 它允许功能中的任意副作用。

  

有没有特别的原因,Erlang(以及我所知的其他函数语言)默认(或使用简单的触发器)进行memoize,或者至少对memoization有明确的支持?

没有语言(至少非玩具语言)实现所有函数调用的默认memoization。为什么?随之而来的是大量的空间泄漏。