Jestem Student IT i rodzaj początkujących do SMLMax Wartość wieloosobowej Drzewa w SML
Ostatnio studiuje na egzamin znalazłem to ćwiczenie.
Dane: typu 'drzewo = Drzewo' a * „liście drzew
zdefiniować mtree funkcji: 'drzewo ->' a, która zwraca największą wartość spośród wszystkich węzłów w wieloosobowej drzewo, zgodnie ze zwykłą relacją zleceń w OCaml (< =)
Przyszedłem zrobić coś takiego poniżej, co oczywiście nie działa.
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;;
Po przeczytaniu odpowiedzi na to publikuję poprawiony kod.
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);;
Pomysł jest taki sam, złóż listę porównujące węzły wykorzystanie mojego lokalnego funkcji, aby to zrobić i podróż przez drzewa wywołując funkcję sama nad listami węzłach kolejnych poziomów.
Nadal nie działa, chociaż. Teraz skarży się na max_node w części fold_left.
Error: This expression has type 'a tree -> 'a tree -> 'a
but an expression was expected of type 'a tree -> 'a tree -> 'a tree
I tu mam zdecydowanie stracił, ponieważ nie mogę zrozumieć, dlaczego nie spodziewa się zwracać „drzewa
Czy możesz wyjaśnić, czego się spodziewasz i co się właściwie dzieje? – Abizern
To, czego się spodziewam, nie jest niczym innym niż to, o co prosi ćwiczenie. To, co się dzieje, to to, że najwyższy poziom OCaml narzeka na to, że typ sub jest "listą drzewiastą". – Trigork
Wskazówka: spróbuj zapisać funkcję rekursywną, która pobiera dwa argumenty (wartość 'v: 'a' i drzewo' t:' drzewo ') i oblicza maksimum' v' i maksimum 't' – Thomash