3

函数式语言的特性之一是函数没有副作用,因此相同的输入应该总是产生相同的输出。似乎这些语言可以很容易地从记忆化中受益匪浅。

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

记忆化有什么本质上的问题吗?

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

相关

编辑

4

1 回答 1

5

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

函数式语言的特性之一是函数没有副作用

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

Erlang(和据我所知的其他函数式语言)默认(或使用简单的触发器)做记忆,或者至少有明确的、良好的记忆支持有什么特别的原因吗?

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

于 2013-08-14T10:43:27.417 回答