4

假设我有这样的类型type 'a tree = Node of int * 'a * 'a tree

int部分是rank.

我也有一个功能let rank = function Node (r, _, _) -> r

假设在我的真实代码中,我有很多需要访问rank节点的地方,而且大部分时间,rank都是相同节点的。

我的问题是我应该总是rank t直接使用函数还是应该给 at 的等级,比如说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)

性能差异是什么?哪种方式更好,为什么?

4

1 回答 1

4

我认为使用 let 来避免计算排名两次更好。我不认为 OCaml 编译器优化了两次调用同一个函数。这将需要某种效果分析。

不过我很高兴错了;)

于 2013-10-31T11:38:18.470 回答