我想用標準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) => ...
我有什麼問題?
編輯:
感謝邁克爾,我固定的代碼,現在,它的工作原理:
- 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;
編輯代碼仍然不正確。它不是遞歸的。左側和右側的節點可能不完整。 – Milwaukoholic 2014-10-23 01:53:48