【发布时间】:2011-08-30 12:27:51
【问题描述】:
不知道这个问题到底要谷歌什么,所以我将它直接发布到 SO:
- Haskell 中的变量是不可变的
- 纯函数应该为相同的参数产生相同的值
从这两点可以推断,如果您在代码中调用somePureFunc somevar1 somevar2 两次,则只有在第一次调用期间计算值才有意义。结果值可以存储在某种巨大的哈希表(或类似的东西)中,并在随后调用该函数时进行查找。我有两个问题:
- GHC 真的会做这种优化吗?
- 如果是这样,在重复计算实际上比查找结果更便宜的情况下,会发生什么行为?
谢谢。
【问题讨论】:
-
我怀疑你是否需要一个“巨型哈希表”,除非你想优化两个独立变量发生两个具有相同值的情况 - 但这可能不值得付出努力,而且事实上更没用该函数参数不会被频繁地完全评估(即,您无法检查它们是否实际上相同,至少不会浪费您想要使用的宝贵计算时间)。
-
查看此非常见问题解答stackoverflow.com/questions/5898162/…
标签: optimization haskell ghc memoization referential-transparency