트리가 완전한지 아닌지를 확인하는 함수를 표준 ml로 만들고 싶습니다. 함수가 어떻게 든 작동하지만 잘못된 유형 및 비 한정적인 경우에 대한 경고를줍니다.트리가 완전한지 확인하십시오. ml
트리 코드 : 이제
datatype 'data tree =
EMPTY
| NODE of 'data tree * 'data * 'data tree;
fun isComplete EMPTY = true
| isComplete (NODE(x, y, z)) = if (x = EMPTY andalso z <> EMPTY) orelse (x <> EMPTY andalso z = EMPTY) then false else true;
위의 함수의 유형은 다음과 같습니다 ''a tree -> bool
하지만 필요한 유형이 나는 데 경고가 'a tree -> bool
입니다 :
stdIn:169.8 Warning: calling polyEqual
stdIn:169.26 Warning: calling polyEqual
stdIn:169.45-169.47 Warning: calling polyEqual
stdIn:169.64-169.66 Warning: calling polyEqual
stdIn:124.1-169.94 Warning: match nonexhaustive
NODE (x,y,z) => ...
내가 가지고있는 문제는 무엇입니까?
편집 : 마이클
덕분에, 나는 코드를 고정 지금은 작동 다음 polyEqual 경고에 관한
- fun isComplete EMPTY = true
| isComplete (NODE(EMPTY, _, EMPTY)) = true
| isComplete (NODE(NODE(x, y, z), _, NODE(a, b, c))) = true
| isComplete (EMPTY, _, NODE(x, y, z)) = false
| isComplete (NODE(x, y, z), _, EMPTY) = false;
EDIT 코드가 여전히 올바르지 않습니다. 그것은 재귀가 아닙니다. 왼쪽과 오른쪽에있는 노드는 완료되지 않을 수 있습니다. – Milwaukoholic