다음은 간단한 질문입니다. 이것은 자유 시간에 서서히 천천히 가고있는 책에 대한 연습 코드입니다 (불균형) 이진 트리가 정렬되었는지 확인합니다 (예 : 왼쪽 < = 부모, 부모 < = 오른쪽).얼랭 성능 - 매개 변수 전달/인라이닝
is_ordered 함수의 경우 모든 조합에 대해 중첩 된 레코드가있는 모든 절을 작성하고 compare_nodes를 제거 할 수 있습니다. 그러나 코드는 compare_nodes로 더 깨끗하게 보입니다. 문제는 compare_node가없는 코드가 빠르거나 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.