Ich möchte eine Funktion in Standard ml, die überprüft, ob ein Baum abgeschlossen ist oder nicht, funktioniert die Funktion irgendwie funktioniert, aber es gibt mir den falschen Typ und eine Warnung von nicht erschöpfenden Fällenüberprüfen, ob ein Baum vollständig ist Standard ml
der Baum Code:
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;
nun den Typ der obigen Funktion ist: ''a tree -> bool
aber die erforderliche Typ ist 'a tree -> bool
die Warnung I ist mit bin:
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) => ...
Was ist das Problem, das ich habe?
EDIT:
Dank Michael, fest ich den Code und jetzt funktioniert es:
- 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;
Das EDIT-Code ist immer noch nicht richtig. Es ist nicht rekursiv. Diese Knoten links und rechts könnten nicht vollständig sein. – Milwaukoholic