函数式语言的一个特性是函数没有副作用,因此相同的输入应该始终产生相同的输出。看起来这些语言可以很容易地从记忆化中受益。 但是,至少就Erlang而言,函数调用没有默认的记忆化。是否有任何特定的原因使Erlang(以及我所知道的其他函数式语言)默认情况下进行记忆化(或通过简单的触发器),或者至少具有显式的良好的记忆化支持? 记忆化本身是否存在问题? 我能想象的一个原因是,使用记忆化会使内存占用快速增长。没错,但是Erlang已经在VM上运行并管理内存,因此我想它可以轻松控制缓存并防止其快速增长。 相关: Erlang中的记忆化 如何在函数式语言Erlang中使用缓存数据? Erlang记忆化的简单示例 编辑: 什么是幂等操作? 太大而无法失败 :)
这个问题中存在一些错误的假设。其中之一是函数式语言的一个特点是函数没有副作用。这是不正确的,只有“纯函数式语言”才有这样的限制。Erlang不是纯函数式语言。 它允许在函数中使用任意的副作用。问:有没有什么特别的原因,Erlang(以及我所知道的其他函数式语言)默认情况下是否使用记忆化(或者简单的触发器),或者至少明确地支持记忆化?答:没有语言(至少非玩具语言)会实现默认记忆化所有函数调用。为什么?会导致大量空间泄漏。