小编sow*_*ust的帖子

ghci编译器优化:两次调用具有相同参数的函数

在下面的简单代码中,从二叉搜索树中删除元素的函数定义的一部分:

 deleteB x (Node n l r) | x == n = Node (leastB r) l (deleteB (leastB r) r)
Run Code Online (Sandbox Code Playgroud)

编译器是否优化了代码,以便它只调用(至少B r)一次,就好像它是:

 deleteB x (Node n l r) | x == n = Node k l (deleteB k r)
                          where k = leastB r
Run Code Online (Sandbox Code Playgroud)

换句话说,编译器是否能够理解由于参数r在函数deleteB的主体内没有改变,因此调用相同函数(leastB)的结果不能给出不同的结果,因此它是没用它来计算两次?

更一般地说,如果编译器执行此优化,我将如何理解是否存在令人惊讶的stackoverflow?谢谢

compiler-construction optimization haskell ghci

3
推荐指数
2
解决办法
334
查看次数