ツリーが完全かどうかをチェックする関数を標準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) => ...
私が抱えている問題は何ですか?
EDIT:マイケルへ
おかげで、私は、コードを固定し、今では動作します: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