Ich bin ein IT-Student Art von Neuling zu OCamlMax Wert eines Multiway Baum in OCaml
Vor kurzem für eine Prüfung studieren ich diese Übung gefunden.
Gegeben: Typ 'ein Baum = Baum der' a * ‚eine Baumliste
eine Funktion mtree definieren: 'a tree ->' a, dass der größten Wert aller Knoten in einem Multiway zurück Baum, nach der üblichen Reihenfolge Beziehung in OCaml (< =)
Ich bin gekommen, um etwas wie das unten zu tun, was natürlich nicht funktioniert.
let rec mtree (Tree (r, sub)) =
let max_node (Tree(a, l1)) (Tree(b, l2)) =
if a >= b then (Tree(a, l1)) else (Tree(b, l2)) in
List.fold_left max_node r sub;;
Nachdem ich eine Antwort zu diesem gelesen habe, poste ich den örtlich festgelegten Code.
let rec mtree (Tree(r,sub)) =
let max_node (Tree(a, l1)) (Tree(b, l2)) =
if a >= b then a else b in
List.fold_left (max_node) r (List.map mtree sub);;
Die Idee ist die gleiche, die Liste falten Sie die Knoten unter Verwendung meiner lokalen Funktion zu vergleichen, um zu tun, und der Baum durchlaufen, indem Sie die Funktion selbst über den Knoten Listen der aufeinander folgenden Ebenen aufrufen.
Funktioniert immer noch nicht. Jetzt beschwert sich Max_node im fold_left-Teil.
Error: This expression has type 'a tree -> 'a tree -> 'a
but an expression was expected of type 'a tree -> 'a tree -> 'a tree
Und hier bin ich auf jeden Fall verloren, weil ich nicht sehen kann, warum es erwartet ‚ein Baum
Können Sie erklären, was Sie erwarten und was tatsächlich passiert? – Abizern
Was ich erwarte, ist nichts anderes, als was die Übung verlangt. Was passiert, ist, dass OCAML Top-Level über die Art der Sub-sein 'eine Baumstruktur Liste beschwert. – Trigork
Tipp: Versuchen Sie, eine rekursive Funktion zu schreiben, die zwei Argumente (ein Wert 'v: 'a' und ein Baum' t: 'ein Baum') und berechnet das Maximum von 'v' und das Maximum von' t' – Thomash