Functional programming 为什么Erlang函数在默认情况下不被记忆?

Functional programming 为什么Erlang函数在默认情况下不被记忆?,functional-programming,erlang,memoization,Functional Programming,Erlang,Memoization,函数的特性之一是函数没有副作用,因此相同的输入应该总是产生相同的输出。这些语言似乎可以很容易地从中受益 但是,至少就函数调用而言,没有默认的备忘录。Erlang(以及据我所知的其他函数式语言)在默认情况下(或者使用一个简单的触发器)进行记忆化,或者至少有明确的、良好的记忆化支持,这有什么特别的原因吗 回忆录本身有什么问题吗 我能想象的一个原因是,通过记忆化,你的记忆足迹可以快速增长。是的,但Erlang已经在VM上运行并管理内存,所以我想它可以驯服缓存并防止它们非常容易地增长 相关的:

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

但是,至少就函数调用而言,没有默认的备忘录。Erlang(以及据我所知的其他函数式语言)在默认情况下(或者使用一个简单的触发器)进行记忆化,或者至少有明确的、良好的记忆化支持,这有什么特别的原因吗

回忆录本身有什么问题吗

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

相关的

编辑

  • :)

    • 在这个问题上有许多错误的假设

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

      不正确,只有“纯函数式语言”有这样的限制。Erlang不是纯功能的。 它允许在函数中产生任意的副作用

      Erlang(以及据我所知的其他函数式语言)在默认情况下(或者使用一个简单的触发器)进行记忆化,或者至少有明确的、良好的记忆化支持,这有什么特别的原因吗


      默认情况下,没有任何语言(至少非玩具语言)实现所有函数调用的记忆。为什么?大量空间泄漏将接踵而至。

      Erlang并非没有副作用。例如,我可以编写一个函数,打开一个日志文件,并从其末尾返回请求的字节数。使用同一参数调用两次,此函数可能会返回两个不同的值。或考虑随机:统一,其返回值不能缓存。当然,我们不生活在没有大小效应的乌托邦。尽管如此,缺乏副作用仍然是FP的基石。不要将副作用与幂等性混淆。“同一输入的多次执行总是产生相同的输出”是幂等性的定义,副作用显然不会影响输出
      太大而不能失败
      标志当然不应该被重视。。。愚人节;)天哪,他们抓到我了。有人告诉过摩托罗拉和爱立信吗?:)我很确定他的意思是“不要默认记忆”