【发布时间】:2014-05-01 22:31:24
【问题描述】:
在下面的简单代码中,部分定义了从二叉搜索树中删除元素的函数:
deleteB x (Node n l r) | x == n = Node (leastB r) l (deleteB (leastB r) r)
编译器是否优化代码,使其只调用一次(最少 B r),就好像它是:
deleteB x (Node n l r) | x == n = Node k l (deleteB k r)
where k = leastB r
?
换句话说,编译器是否能够理解,由于参数 r 在函数 deleteB 的主体内没有更改,因此在其上调用同一函数 (leastB) 的结果不能给出不同的结果,所以计算两次也没用?
更一般地说,如果不存在惊人的stackoverflow,我怎么能理解编译器是否进行了这种优化?谢谢
【问题讨论】:
-
GHC 不会这样做:haskell.org/haskellwiki/GHC/…
标签: haskell optimization compiler-construction ghci