Lasst uns sagen, ich habe eine n-äre BaumtypOcaml - match n-ary_tree mit leeren Baum
type tree = Node of (char*tree) list ref;;
und diese entsprechen dem leeren Baum
let empty_tree()= Node(ref[]);;
Ich versuche, ein zu schreiben Funktion, sieht nur, wenn mein Baum leer ist oder nicht, wie
let checkIsEmpty t = match t with empty_tree-> print_string "tree is empty";;
Aber wenn ich checkIsEmpty empty_tree;;
schreiben sie es nur eine Einheit zurückkehren, wird nicht print "Baum ist leer"
Ich habe auch versucht, auf diese Weise
let checkisEmpty t = match t with z when z = empty_tree-> print_string "tree is empty";;
Leider ohne Erfolg.
Wie kann ich aussehen, wenn mein Baum leer ist? Ich möchte die Übereinstimmung behalten und die Art, wie Baum deklariert wird (Leer ist nicht Teil des Typs ..), wenn möglich.
Danke!
Danke für die Antwort, ja, ich weiß, ich sollte ein tun Fall für, wenn es nicht leer ist, aber für jetzt versuche ich nur, meinem Baum zu entsprechen, wenn der Baum, der in meiner Funktion übergeben wurde, gleich dem empty_tree ist, versuchte ich das flush stdout, aber es funktioniert auch nicht :((Ich versuchte mit dem "when" Schlüsselwort) – anthomaxcool
Ich mache buchstäblich checkisEmpty empty_tree, und in der Funktion schaue ich ob t (was in diesem Fall leer ist) gleich leer ist und es wird nicht aufschreiben "Baum ist leer" Wenn ich eine Groß-/Kleinschreibung hinzufüge, etwas wie '| _ -> Print_string" nicht leer "; flush stdout', wird es nicht gedruckt – anthomaxcool
(Beachte wieder, dass deine' empty_t Ree ist eine Funktion, kein Baum.) Vielleicht haben Sie nur Probleme, überhaupt eine Ausgabe zu erhalten. Was passiert, wenn Sie dies nur ausführen: 'print_string 'testing 1 2 3 \ n"; flush stdout' Als weiteren Seitenkommentar ist es einfacher, die Ausgabe zu sehen, wenn Sie mit '" \ n "' enden, sonst kann es verloren gehen. –