OCaml中的模式匹配性能

时间:2013-10-31 11:23:05

标签: ocaml

假设我有这样的类型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)

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

1 个答案:

答案 0 :(得分:4)

我认为使用let来避免两次计算排名会更好。我不认为OCaml编译器优化两次调用相同的函数;它需要某种效果分析。

我很高兴错了;)