假设我有这样的类型type 'a tree = Node of int * 'a * 'a tree
int
部分是rank
。
我还有一个函数let rank = function Node (r, _, _) -> r
。
假设在我的实际代码中,我有很多地方需要访问节点的rank
,并且很多时候需要访问相同节点的rank
。
我的问题是,我是否应该直接使用rank t
函数,还是应该将t的等级赋予r
,然后使用r
?
例如,我可以做
if rank t1 < rank t2 then Node (rank t1 + 1, 5, t1)
else Node (rank t2 + 1, 5, t2)
或
let r1 = rank t1 in let r2 = rank t2 in
if r1 < r2 then Node (r1+1, 5, t1) else Node (r2, 5, t2)
性能差异是什么?哪种方式更好,为什么?
答案 0 :(得分:4)
我认为使用let来避免两次计算排名会更好。我不认为OCaml编译器优化两次调用相同的函数;它需要某种效果分析。
我很高兴错了;)