相关疑难解决方法(0)

Haskell优化器是否在范围内对重复的函数调用使用memoization?

考虑这个功能:

f as = if length as > 100 then length as else 100
Run Code Online (Sandbox Code Playgroud)

由于函数是纯粹的,因此很明显两个调用的长度都是相同的.我的问题是Haskell优化器将上面的代码转换成以下代码吗?

f as = 
  let l = length as
  in if l > 100 then l else 100
Run Code Online (Sandbox Code Playgroud)

如果是,那么哪个级别设置启用它?如果没有,那么为什么呢?在这种情况下,内存浪费不能成为本答案中解释的原因,因为一旦函数执行完成,引入的变量就会被释放.


请注意,由于本地范围,这不是此问题的重复,因此可能会得到完全不同的答案.

compiler-construction optimization haskell memoization

12
推荐指数
3
解决办法
535
查看次数