下面是一個簡單的問題。這是我的代碼,用於練習我在空閒時間慢慢進行的練習,該練習檢查是否排序(不平衡)二叉樹(例如,左邊的< =父親,父親< =右邊)。Erlang性能 - 參數傳遞/內聯
對於is_ordered函數,可以爲每個組合寫出嵌套記錄的所有子句,並且刪除compare_nodes;但是,代碼看起來比較乾淨,使用了compare_nodes。問題是,沒有compare_nodes的代碼會更快,還是編譯器足夠聰明以跟蹤const正確性/以其他方式優化compare_node(對於真實世界的代碼,不僅僅是這個簡單的例子)?
-record(node, {l=false,r=false,v}).
is_ordered(false) -> true;
is_ordered(#node{l=L,r=R} = N) ->
compare_nodes(L,N) and compare_nodes(N,R) and is_ordered(L) and is_ordered(R).
compare_nodes(L,R) when L == false; R == false -> true;
compare_nodes(#node{v=LV},#node{v=RV}) -> LV =< RV.