Sono uno studente IT e tipo di un novizio di OCamlMax Valore di un albero a più vie in OCaml
Recentemente, studiando per un esame che ho trovato questo esercizio.
Data: tipo 'un albero = Albero della' un * 'un elenco albero
definire una funzione mtree: 'un albero ->' una, che restituisce il valore più grande di tutti i nodi in un multiway albero, seguendo la consueta relazione di ordine in OCaml (< =)
Sono venuto a fare qualcosa di simile qui sotto, che, naturalmente, non funziona.
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;;
Dopo aver letto una risposta a questo sto postando il codice fisso.
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);;
L'idea è la stessa, piegare la lista confrontando i nodi facendo uso della mia funzione locale di farlo e viaggiare attraverso l'albero chiamando la stessa funzione di sopra i nodi liste dei livelli consecutivi.
Tuttavia, non funziona ancora. Ora si lamenta di max_node nella parte 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
E qui sto sicuramente perso perché non riesco a capire perché ci si aspetta di restituire un 'un albero
Puoi spiegare cosa ti aspetti che accada e cosa sta effettivamente accadendo? – Abizern
Quello che mi aspetto non è altro da quello che l'esercizio richiede. Quello che sta succedendo è che OCaml di alto livello si lamenta del tipo di sub che è "una lista ad albero. – Trigork
Suggerimento: prova a scrivere una funzione ricorsiva che prende due argomenti (un valore 'v: 'a' e un albero' t:' a tree') e calcola il massimo di 'v' e il massimo di' t' – Thomash